We like the architecture of our applications to revolve around the business logic, not around technical details (and especially not around the database).
In my team at Sky Network Services we use the Clean Architecture and it has given us a great deal of benefits: the business logic is explicit, we are free to change our technical decisions, the app is easy to test, working on it is faster and scalable, it’s hard to do the wrong thing, and many more.
But it comes at a cost, of course. In this talk I’ll tell you the story of our experience with Clean Architecture and give you some tips to get the most out of it.
Example Project
https://github.com/mattia-battiston/clean-architecture-example
Downloads
Online: https://goo.gl/DTxftJ
PDF: https://goo.gl/ZAtdBN
Powerpoint: https://goo.gl/D54wdZ (but you need to install these fonts to see it properly: https://goo.gl/iH8SO5)
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
There's another talk about Clean Architecture, SOLID, and our approach at InfoJobs. If you need the slides, don't hesitate to fork https://github.com/schibsted-android-training/workshop-5
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
There's another talk about Clean Architecture, SOLID, and our approach at InfoJobs. If you need the slides, don't hesitate to fork https://github.com/schibsted-android-training/workshop-5
Introducing Android Architecture
If you would like to view the related sample codes, you can refer to link below:
https://github.com/ZahraHeydari/ArtGallery
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
In this presentation we will present the general philosophy of Clean Architecture, Hexagonal Architecture, and Ports & Adapters: discussing why these approaches are useful and general guidelines for introducing them to your code. Chiefly, we will show how to implement these patterns within your Spring (Boot) Applications. Through a publicly available reference app, we will demonstrate what these concepts can look like within Spring and walkthrough a handful of scenarios: isolating core business logic, ease of testing, and adding a new feature or two.
Clean architecture - Protecting the DomainVictor Rentea
The goal of architecture is to simplify the most complex parts of your logic. Any other goal should be secondary to this. The problem is that you can’t always anticipate where the complexity of your application will accumulate, especially when confronted with ever-changing requirements. The only way to keep your code simple is to gradually evolve the architecture without adding useless complexity up front, but always looking out for opportunities to break-down and refactor towards the most simple design that solves the problem. Drawing concepts from the Domain-Driven Development mindset, this talk summarizes the most important lessons learned designing and consulting many real-world projects. Along the way, you’ll hear about Value Objects and Entities, DTOs, Dependency Inversion Principle, Facades, the Onion Architecture and many pragmatic tips and tricks immediately applicable to your day-to-day work.
Slides of the talk I gave at ConFoo Montréal 2019 about "Hexagonal Architecture".
Hexagonal Architecture, Clean Architecture, Domain-Driven Design… You may have heard about them. Let's start from scratch in this session and go beyond the buzzwords. We'll go together though these ideas to understand how you can improve the maintainability of your projects', either greenfield or legacy.
Clean Pragmatic Architecture - Avoiding a MonolithVictor Rentea
Talk built based on several of my trainings: http://www.victorrentea.ro/#training
Covers: Clean/Onion/Hexagonal Architecture, Domain Entities, Value Objects, Repository, Extract When it Grows Principle, Dependency Inversion Principle, Clean Code and Design Patterns.
These are the backing slides of the talks given at JPoint 2017 and Devoxx PL 2017: https://www.youtube.com/embed/4-4ahz7zDiQ
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
2012 the clean architecture by Uncle bob GEORGE LEON
Very interesting 2012 the clean architecture by Uncle Bob
Also go buy the book Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
Clean Architecture Essentials - Stockholm Software CraftsmanshipIvan Paulovich
About the talk:
Software Architecture is not about picking frameworks then gluing the pieces together! Let's dig into a software implementation designed to support the use cases, we will learn how to make the use cases a standalone component and see how a good architecture allows major decisions to be deferred. We will discuss component coupling and cohesion during the development timeline. Is your application architecture a Web Application? Are your tests taking too long to run? You will learn how to make the delivery mechanism an irrelevant and testable detail.
About the speaker:
Ivan Paulovich is an Agile .NET developer that enjoy solutions based on use cases and decoupled from technology details. Active on GitHub he supports OSS about Domain-Driven Design, TDD, Event Sourcing, CQRS, SOLID and Microservices. Microsoft MVP Reconnect. Checkout @ivanpaulovich on GitHub.
Nowadays traditional layered monolithic architecture in Java world is not so popular as 5-10 years ago. I remember how we wrote tons of code for each layer repeating almost the same parts for every application. Add unit and integration testing to understand how much time and efforts has been spent on repeatable work. All cool ideas around DDD (domain driven design) and Hexagonal Architecture was just a nice theory because reality hasn’t allow us to implement it easily. Even Dependency Injection with Spring framework was completely focused on traditional layered approach, not even talking about JavaEE platform.
Today we have Spring Boot ecosystem covering most of our needs for integration with almost all possible technologies and microservices architectural trend, enabling completely new approach to build Java applications around domain model. It is so natural to build Java domain-oriented services and connect them with external world using ports and adapters, that Hexagonal Architecture is almost enabled by default. You just need to switch your way of thinking…
All 3 Clean Code presentations provide great value by themselves, but taken together are designed to offer a holistic approach to successful software creation. This first session creates the foundation for the 2nd and 3rd Clean Code presentation on Dependency Injection, as it explains expected base knowledge. Why writing Clean Code makes us more efficient Over the lifetime of a product, maintaining the product is actually one - if not the most - expensive area(s) of the overall product costs.
Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code. You will be presented design patterns and best practices which will make you write better and more easily maintainable code, seeing code in a holistic way.
You will learn how to apply them by using an existing implementation as the starting point of the presentation. Finally, patterns & practices benefits are explained. This presentation is based on C# and Visual Studio 2012. However, the demonstrated patterns and practice can be applied to every other programming language too.
Note: Moving forwards this presentation will be updated with the latest version of the slides for the last event I did the presentation instead of creating new separate slide decks here on SlideShare.
Presentation dates and locations:
2015-10-03 Silicon Valley Code Camp, San Jose, CA
2015-06-27 SoCal Code Camp - San Diego, CA
2014-11-14 SoCal Code Camp - Los Angeles, CA
2014-10-18 Desert Code Camp - Chandler, AZ
2014-10-11 Silicon Valley Code Camp, Los Altos Hills, CA
Understanding MicroSERVICE Architecture with Java & Spring BootKashif Ali Siddiqui
This is a deep journey into the realm of "microservice architecture", and in that I will try to cover each inch of it, but with a fixed tech stack of Java with Spring Cloud. Hence in the end, you will be get know each and every aspect of this distributed design, and will develop an understanding of each and every concern regarding distributed system construct.
Esta charla comprende las lecciones aprendidas convirtiendo la app de Android de Teambox (una app repleta de deuda técnica y con un alto nivel de acoplamiento entre clases), en la versión actual de Redbooth, que intenta cumplir la arquitectura Hexagonal y los principios SOLID. Durante la exposición explicaremos como fuimos desenredando el código paso a paso; como aplicamos por partes los conceptos de la arquitectura hexagonal; como dejamos de lado componentes del framework de Android que dificultaban el mantenimiento de la app; y que errores cometimos, como los solucionamos y como se podrían haber evitado.
Introducing Android Architecture
If you would like to view the related sample codes, you can refer to link below:
https://github.com/ZahraHeydari/ArtGallery
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
In this presentation we will present the general philosophy of Clean Architecture, Hexagonal Architecture, and Ports & Adapters: discussing why these approaches are useful and general guidelines for introducing them to your code. Chiefly, we will show how to implement these patterns within your Spring (Boot) Applications. Through a publicly available reference app, we will demonstrate what these concepts can look like within Spring and walkthrough a handful of scenarios: isolating core business logic, ease of testing, and adding a new feature or two.
Clean architecture - Protecting the DomainVictor Rentea
The goal of architecture is to simplify the most complex parts of your logic. Any other goal should be secondary to this. The problem is that you can’t always anticipate where the complexity of your application will accumulate, especially when confronted with ever-changing requirements. The only way to keep your code simple is to gradually evolve the architecture without adding useless complexity up front, but always looking out for opportunities to break-down and refactor towards the most simple design that solves the problem. Drawing concepts from the Domain-Driven Development mindset, this talk summarizes the most important lessons learned designing and consulting many real-world projects. Along the way, you’ll hear about Value Objects and Entities, DTOs, Dependency Inversion Principle, Facades, the Onion Architecture and many pragmatic tips and tricks immediately applicable to your day-to-day work.
Slides of the talk I gave at ConFoo Montréal 2019 about "Hexagonal Architecture".
Hexagonal Architecture, Clean Architecture, Domain-Driven Design… You may have heard about them. Let's start from scratch in this session and go beyond the buzzwords. We'll go together though these ideas to understand how you can improve the maintainability of your projects', either greenfield or legacy.
Clean Pragmatic Architecture - Avoiding a MonolithVictor Rentea
Talk built based on several of my trainings: http://www.victorrentea.ro/#training
Covers: Clean/Onion/Hexagonal Architecture, Domain Entities, Value Objects, Repository, Extract When it Grows Principle, Dependency Inversion Principle, Clean Code and Design Patterns.
These are the backing slides of the talks given at JPoint 2017 and Devoxx PL 2017: https://www.youtube.com/embed/4-4ahz7zDiQ
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
2012 the clean architecture by Uncle bob GEORGE LEON
Very interesting 2012 the clean architecture by Uncle Bob
Also go buy the book Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
Clean Architecture Essentials - Stockholm Software CraftsmanshipIvan Paulovich
About the talk:
Software Architecture is not about picking frameworks then gluing the pieces together! Let's dig into a software implementation designed to support the use cases, we will learn how to make the use cases a standalone component and see how a good architecture allows major decisions to be deferred. We will discuss component coupling and cohesion during the development timeline. Is your application architecture a Web Application? Are your tests taking too long to run? You will learn how to make the delivery mechanism an irrelevant and testable detail.
About the speaker:
Ivan Paulovich is an Agile .NET developer that enjoy solutions based on use cases and decoupled from technology details. Active on GitHub he supports OSS about Domain-Driven Design, TDD, Event Sourcing, CQRS, SOLID and Microservices. Microsoft MVP Reconnect. Checkout @ivanpaulovich on GitHub.
Nowadays traditional layered monolithic architecture in Java world is not so popular as 5-10 years ago. I remember how we wrote tons of code for each layer repeating almost the same parts for every application. Add unit and integration testing to understand how much time and efforts has been spent on repeatable work. All cool ideas around DDD (domain driven design) and Hexagonal Architecture was just a nice theory because reality hasn’t allow us to implement it easily. Even Dependency Injection with Spring framework was completely focused on traditional layered approach, not even talking about JavaEE platform.
Today we have Spring Boot ecosystem covering most of our needs for integration with almost all possible technologies and microservices architectural trend, enabling completely new approach to build Java applications around domain model. It is so natural to build Java domain-oriented services and connect them with external world using ports and adapters, that Hexagonal Architecture is almost enabled by default. You just need to switch your way of thinking…
All 3 Clean Code presentations provide great value by themselves, but taken together are designed to offer a holistic approach to successful software creation. This first session creates the foundation for the 2nd and 3rd Clean Code presentation on Dependency Injection, as it explains expected base knowledge. Why writing Clean Code makes us more efficient Over the lifetime of a product, maintaining the product is actually one - if not the most - expensive area(s) of the overall product costs.
Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code. You will be presented design patterns and best practices which will make you write better and more easily maintainable code, seeing code in a holistic way.
You will learn how to apply them by using an existing implementation as the starting point of the presentation. Finally, patterns & practices benefits are explained. This presentation is based on C# and Visual Studio 2012. However, the demonstrated patterns and practice can be applied to every other programming language too.
Note: Moving forwards this presentation will be updated with the latest version of the slides for the last event I did the presentation instead of creating new separate slide decks here on SlideShare.
Presentation dates and locations:
2015-10-03 Silicon Valley Code Camp, San Jose, CA
2015-06-27 SoCal Code Camp - San Diego, CA
2014-11-14 SoCal Code Camp - Los Angeles, CA
2014-10-18 Desert Code Camp - Chandler, AZ
2014-10-11 Silicon Valley Code Camp, Los Altos Hills, CA
Understanding MicroSERVICE Architecture with Java & Spring BootKashif Ali Siddiqui
This is a deep journey into the realm of "microservice architecture", and in that I will try to cover each inch of it, but with a fixed tech stack of Java with Spring Cloud. Hence in the end, you will be get know each and every aspect of this distributed design, and will develop an understanding of each and every concern regarding distributed system construct.
Esta charla comprende las lecciones aprendidas convirtiendo la app de Android de Teambox (una app repleta de deuda técnica y con un alto nivel de acoplamiento entre clases), en la versión actual de Redbooth, que intenta cumplir la arquitectura Hexagonal y los principios SOLID. Durante la exposición explicaremos como fuimos desenredando el código paso a paso; como aplicamos por partes los conceptos de la arquitectura hexagonal; como dejamos de lado componentes del framework de Android que dificultaban el mantenimiento de la app; y que errores cometimos, como los solucionamos y como se podrían haber evitado.
In 2008 Android app code had a lot of boilerplate, and was very error prone.
More code.. more bugs!
Now it doesn't have to be... but that is an option that each developer needs to take!
NET Systems Programming Learned the Hard Way.pptxpetabridge
What is a thread quantum and why is it different on Windows Desktop and Windows Server? What's the difference between a blocking call and a blocking flow? Why did our remoting benchmarks suddenly drop when we moved to .NET 6? When should I try to write lock-free code? What does the `volatile` keyword mean?
Welcome to the types of questions my team and I are asked, or ask ourselves, on a regular basis - we're the makers of Akka.NET, a high performance distributed actor system library and these are the sorts of low-level questions we need to answer in order to build great experiences for our own users.
In this talk we're going to learn about .NET systems programming, the low level components we hope we can take for granted, but sometimes can't. In particular:
- The `ThreadPool` and how work queues operate in practice;
- Synchronization mechanisms - including `lock`-less ones;
- Memory management, `Span<T>`, and garbage collection;
- `await`, `Task`, and the synchronization contexts; and
- Crossing user-code and system boundaries in areas such as sockets.
This talk will help .NET developers understand why their code works the way it does and what to do in scenarios that demand high performance.
Proxy Deep Dive JUG Saxony Day 2015-10-02Sven Ruppert
Ein wenig über Proxy´s. Wer mehr Hintergrundinfos dazu haben möchte, empfehle ich das Buch von Dr. Kabutz und mir :
http://www.amazon.de/Dynamic-Proxies-Dr-Heinz-Kabutz/dp/3868021531/ref=asap_bc?ie=UTF8
Scalable and Flexible Machine Learning With Scala @ LinkedInVitaly Gordon
The presentation given by Chris Severs and myself at the Bay Area Scala Enthusiasts meetup. http://www.meetup.com/Bay-Area-Scala-Enthusiasts/events/105409962/
Most teams need to answer questions like “When will it be done? What can I get by date X?”. However, common estimation approaches often fail to give us the predictability we want, and tend to introduce bad behaviours like hard deadlines and hiding uncertainty.
In this session, I’ll show you how, step by step and with real life examples, my team uses their historical data and metrics to forecast the future and answer these questions with confidence.
Download slides at: http://bit.ly/2pD9rfQ
Book discount link: http://leanpub.com/metricsforbusinessdecisions/c/MATTIA20-BZXib2F
Most teams need to answer questions like “When will it be done? What can I get by date X?”. However, common estimation approaches often fail to give us the predictability we want, and tend to introduce bad behaviours like hard deadlines and hiding uncertainty.
In this session, I’ll show you how, step by step and with real life examples, my team uses their historical data and metrics to forecast the future and answer these questions with confidence.
Download slides at: http://bit.ly/2pD9rfQ
Book discount link: http://leanpub.com/metricsforbusinessdecisions/c/MATTIA20-BZXib2F
The science of happiness
"I'll be happy once <I get this done/I get a promotion/I change job/I buy a new car/etc >". How many times have you said something like this? We think happiness comes from success, but science has proven that it's the other way around: being happy makes us successful.
Happiness has huge benefits on most aspects of our lives, including the professional one.
So how can we be happy? Well, turns out we can quite easily "trick" our brain into being happy(er). Let me tell you how, and how I apply these concepts in my day to day work with my team
Downloads
Powerpoint: https://goo.gl/teHeis
PDF: https://goo.gl/qwV6KB
Super chickens are not safe
What makes successful teams? Let's explore some of the science behind it.
Downloads
Powerpoint: https://goo.gl/hS4nIw
PDF: https://goo.gl/p8Ht29
Most recent version: https://www.slideshare.net/secret/tvYgHqBQQvL3fB
=======================================================
The science of happiness
"I'll be happy once <I get this done/I get a promotion/I change job/I buy a new car/etc >". How many times have you said something like this? We think happiness comes from success, but science has proven that it's the other way around: being happy makes us successful.
Happiness has huge benefits on most aspects of our lives, including the professional one.
So how can we be happy? Well, turns out we can quite easily "trick" our brain into being happy(er). Let me tell you how, and how I apply these concepts in my day to day work with my team
Downloads
Powerpoint: https://goo.gl/DcZiLq
PDF: https://goo.gl/zqmABA
Kanban Metrics in practice for leading Continuous ImprovementMattia Battiston
Why should I bother collecting metrics? How can they help me? My CFD is pretty and colourful, but what is it actually trying to tell me?
CFD, control chart, lead time distribution, percentiles...Metrics can be daunting to start with but if you know how to interpret them they can drive continuous improvement and forecast the future and take your Kanban system to the next level! It’s much easier than you think, no need for complex maths or expensive software.
At Sky Network Services a few teams are using Kanban and metrics. In this talk I’ll share our experience: what metrics we use, how we use each one of them, what little data we collect to get a whole lot of value, what pitfalls we encountered.
Downloads
Powerpoint: https://goo.gl/4CkKJd
PDF: https://goo.gl/VDW93U
Perche’ dovrei raccogliere metriche? Come possono aiutarmi? Il mio CFD e’ molto colorato ma a cosa serve?
CFD, control chart, lead time distribution…Le metriche possono incutere timore ma se sai come interpretarle puoi portare il tuo processo a un nuovo livello!
In questo experience report pieno di esempi pratici vi raccontero’ come il mio team a Sky (Londra) usa Kanban e metriche per:
- guidare il processo di miglioramento continuo
- essere prevedibili, senza bisogno di stime
Downloads
Powerpoint: https://goo.gl/mHg3nx
PDF: https://goo.gl/WFaoW8
Kanban Metrics in practice at Sky Network ServicesMattia Battiston
Why should I bother collecting metrics? How can they help me? My CFD is pretty and colourful, but what is it actually trying to tell me?
CFD, control chart, lead time distribution, percentiles...Metrics can be daunting to start with but if you know how to interpret them they can really take your Kanban system to the next level - drive continuous improvement and forecast the future! It’s much easier than you think, no need for complex maths or expensive software.
At Sky Network Services a few teams are using Kanban and metrics. In this talk I’ll share our experience: what metrics we use, how we use each one of them, what little data we collect to get a whole lot of value, what pitfalls we encountered.
Downloads
Powerpoint: https://goo.gl/19wOjU
PDF: https://goo.gl/AM69MF
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Anthony Dahanne
Les Buildpacks existent depuis plus de 10 ans ! D’abord, ils étaient utilisés pour détecter et construire une application avant de la déployer sur certains PaaS. Ensuite, nous avons pu créer des images Docker (OCI) avec leur dernière génération, les Cloud Native Buildpacks (CNCF en incubation). Sont-ils une bonne alternative au Dockerfile ? Que sont les buildpacks Paketo ? Quelles communautés les soutiennent et comment ?
Venez le découvrir lors de cette session ignite
Modern design is crucial in today's digital environment, and this is especially true for SharePoint intranets. The design of these digital hubs is critical to user engagement and productivity enhancement. They are the cornerstone of internal collaboration and interaction within enterprises.
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
CyanicLab, an offshore custom software development company based in Sweden,India, Finland, is your go-to partner for startup development and innovative web design solutions. Our expert team specializes in crafting cutting-edge software tailored to meet the unique needs of startups and established enterprises alike. From conceptualization to execution, we offer comprehensive services including web and mobile app development, UI/UX design, and ongoing software maintenance. Ready to elevate your business? Contact CyanicLab today and let us propel your vision to success with our top-notch IT solutions.
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTier1 app
Even though at surface level ‘java.lang.OutOfMemoryError’ appears as one single error; underlyingly there are 9 types of OutOfMemoryError. Each type of OutOfMemoryError has different causes, diagnosis approaches and solutions. This session equips you with the knowledge, tools, and techniques needed to troubleshoot and conquer OutOfMemoryError in all its forms, ensuring smoother, more efficient Java applications.
In software engineering, the right architecture is essential for robust, scalable platforms. Wix has undergone a pivotal shift from event sourcing to a CRUD-based model for its microservices. This talk will chart the course of this pivotal journey.
Event sourcing, which records state changes as immutable events, provided robust auditing and "time travel" debugging for Wix Stores' microservices. Despite its benefits, the complexity it introduced in state management slowed development. Wix responded by adopting a simpler, unified CRUD model. This talk will explore the challenges of event sourcing and the advantages of Wix's new "CRUD on steroids" approach, which streamlines API integration and domain event management while preserving data integrity and system resilience.
Participants will gain valuable insights into Wix's strategies for ensuring atomicity in database updates and event production, as well as caching, materialization, and performance optimization techniques within a distributed system.
Join us to discover how Wix has mastered the art of balancing simplicity and extensibility, and learn how the re-adoption of the modest CRUD has turbocharged their development velocity, resilience, and scalability in a high-growth environment.
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Globus
The Earth System Grid Federation (ESGF) is a global network of data servers that archives and distributes the planet’s largest collection of Earth system model output for thousands of climate and environmental scientists worldwide. Many of these petabyte-scale data archives are located in proximity to large high-performance computing (HPC) or cloud computing resources, but the primary workflow for data users consists of transferring data, and applying computations on a different system. As a part of the ESGF 2.0 US project (funded by the United States Department of Energy Office of Science), we developed pre-defined data workflows, which can be run on-demand, capable of applying many data reduction and data analysis to the large ESGF data archives, transferring only the resultant analysis (ex. visualizations, smaller data files). In this talk, we will showcase a few of these workflows, highlighting how Globus Flows can be used for petabyte-scale climate analysis.
Advanced Flow Concepts Every Developer Should KnowPeter Caitens
Tim Combridge from Sensible Giraffe and Salesforce Ben presents some important tips that all developers should know when dealing with Flows in Salesforce.
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
Listen to the keynote address and hear about the latest developments from Rachana Ananthakrishnan and Ian Foster who review the updates to the Globus Platform and Service, and the relevance of Globus to the scientific community as an automation platform to accelerate scientific discovery.
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
Unlocking Business Potential: Tailored Technology Solutions by Prosigns
Discover how Prosigns, a leading technology solutions provider, partners with businesses to drive innovation and success. Our presentation showcases our comprehensive range of services, including custom software development, web and mobile app development, AI & ML solutions, blockchain integration, DevOps services, and Microsoft Dynamics 365 support.
Custom Software Development: Prosigns specializes in creating bespoke software solutions that cater to your unique business needs. Our team of experts works closely with you to understand your requirements and deliver tailor-made software that enhances efficiency and drives growth.
Web and Mobile App Development: From responsive websites to intuitive mobile applications, Prosigns develops cutting-edge solutions that engage users and deliver seamless experiences across devices.
AI & ML Solutions: Harnessing the power of Artificial Intelligence and Machine Learning, Prosigns provides smart solutions that automate processes, provide valuable insights, and drive informed decision-making.
Blockchain Integration: Prosigns offers comprehensive blockchain solutions, including development, integration, and consulting services, enabling businesses to leverage blockchain technology for enhanced security, transparency, and efficiency.
DevOps Services: Prosigns' DevOps services streamline development and operations processes, ensuring faster and more reliable software delivery through automation and continuous integration.
Microsoft Dynamics 365 Support: Prosigns provides comprehensive support and maintenance services for Microsoft Dynamics 365, ensuring your system is always up-to-date, secure, and running smoothly.
Learn how our collaborative approach and dedication to excellence help businesses achieve their goals and stay ahead in today's digital landscape. From concept to deployment, Prosigns is your trusted partner for transforming ideas into reality and unlocking the full potential of your business.
Join us on a journey of innovation and growth. Let's partner for success with Prosigns.
We describe the deployment and use of Globus Compute for remote computation. This content is aimed at researchers who wish to compute on remote resources using a unified programming interface, as well as system administrators who will deploy and operate Globus Compute services on their research computing infrastructure.
Accelerate Enterprise Software Engineering with PlatformlessWSO2
Key takeaways:
Challenges of building platforms and the benefits of platformless.
Key principles of platformless, including API-first, cloud-native middleware, platform engineering, and developer experience.
How Choreo enables the platformless experience.
How key concepts like application architecture, domain-driven design, zero trust, and cell-based architecture are inherently a part of Choreo.
Demo of an end-to-end app built and deployed on Choreo.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
How to Position Your Globus Data Portal for Success Ten Good PracticesGlobus
Science gateways allow science and engineering communities to access shared data, software, computing services, and instruments. Science gateways have gained a lot of traction in the last twenty years, as evidenced by projects such as the Science Gateways Community Institute (SGCI) and the Center of Excellence on Science Gateways (SGX3) in the US, The Australian Research Data Commons (ARDC) and its platforms in Australia, and the projects around Virtual Research Environments in Europe. A few mature frameworks have evolved with their different strengths and foci and have been taken up by a larger community such as the Globus Data Portal, Hubzero, Tapis, and Galaxy. However, even when gateways are built on successful frameworks, they continue to face the challenges of ongoing maintenance costs and how to meet the ever-expanding needs of the community they serve with enhanced features. It is not uncommon that gateways with compelling use cases are nonetheless unable to get past the prototype phase and become a full production service, or if they do, they don't survive more than a couple of years. While there is no guaranteed pathway to success, it seems likely that for any gateway there is a need for a strong community and/or solid funding streams to create and sustain its success. With over twenty years of examples to draw from, this presentation goes into detail for ten factors common to successful and enduring gateways that effectively serve as best practices for any new or developing gateway.
top nidhi software solution freedownloadvrstrong314
This presentation emphasizes the importance of data security and legal compliance for Nidhi companies in India. It highlights how online Nidhi software solutions, like Vector Nidhi Software, offer advanced features tailored to these needs. Key aspects include encryption, access controls, and audit trails to ensure data security. The software complies with regulatory guidelines from the MCA and RBI and adheres to Nidhi Rules, 2014. With customizable, user-friendly interfaces and real-time features, these Nidhi software solutions enhance efficiency, support growth, and provide exceptional member services. The presentation concludes with contact information for further inquiries.
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?XfilesPro
Worried about document security while sharing them in Salesforce? Fret no more! Here are the top-notch security standards XfilesPro upholds to ensure strong security for your Salesforce documents while sharing with internal or external people.
To learn more, read the blog: https://www.xfilespro.com/how-does-xfilespro-make-document-sharing-secure-and-seamless-in-salesforce/
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisGlobus
JASMIN is the UK’s high-performance data analysis platform for environmental science, operated by STFC on behalf of the UK Natural Environment Research Council (NERC). In addition to its role in hosting the CEDA Archive (NERC’s long-term repository for climate, atmospheric science & Earth observation data in the UK), JASMIN provides a collaborative platform to a community of around 2,000 scientists in the UK and beyond, providing nearly 400 environmental science projects with working space, compute resources and tools to facilitate their work. High-performance data transfer into and out of JASMIN has always been a key feature, with many scientists bringing model outputs from supercomputers elsewhere in the UK, to analyse against observational or other model data in the CEDA Archive. A growing number of JASMIN users are now realising the benefits of using the Globus service to provide reliable and efficient data movement and other tasks in this and other contexts. Further use cases involve long-distance (intercontinental) transfers to and from JASMIN, and collecting results from a mobile atmospheric radar system, pushing data to JASMIN via a lightweight Globus deployment. We provide details of how Globus fits into our current infrastructure, our experience of the recent migration to GCSv5.4, and of our interest in developing use of the wider ecosystem of Globus services for the benefit of our user community.
Developing Distributed High-performance Computing Capabilities of an Open Sci...Globus
COVID-19 had an unprecedented impact on scientific collaboration. The pandemic and its broad response from the scientific community has forged new relationships among public health practitioners, mathematical modelers, and scientific computing specialists, while revealing critical gaps in exploiting advanced computing systems to support urgent decision making. Informed by our team’s work in applying high-performance computing in support of public health decision makers during the COVID-19 pandemic, we present how Globus technologies are enabling the development of an open science platform for robust epidemic analysis, with the goal of collaborative, secure, distributed, on-demand, and fast time-to-solution analyses to support public health.
6. “
The center of your application
is not the database. Nor is it
one or more of the frameworks
you may be using.
The center of your application
is the use cases of your
application
Unclebob
Source: NODB
10. EXAMPLE DOMAIN: ISP
Entity:
Telephone
Exchange
Entity:
Broadband
Access Device
Use case:
Get Capacity
“Have we got space for
more customers? Can
we sell more
broadband?”
Use case:
Reconcile
“Has any physical
device changed?
(e.g. new serial
number)”
Use case:
Get Details
“Details of a
particular
device?”
11. OUR CLEAN ARCHITECTURE
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
12. A.k.a (unclebob’s style)
Entities
Use Cases
Configuration
+
Core: business logic
Entrypoints: access
to the application
Data Providers:
retrieve and store
information
...
Configuration: wires
everything together
* arrows represent dependency
16. ENTITY
public class Exchange {
private final String code;
private final String name;
private final String postCode;
public Exchange(String code, String name, String postCode) {
this.code = code;
this.name = name;
this.postCode = postCode;
}
// … getters
@Override
public String toString() {
return ...;
}
}
17. ENTITY
public class BroadbandAccessDevice {
private Exchange exchange;
private String hostname;
private String serialNumber;
private DeviceType type;
private int availablePorts;
public BroadbandAccessDevice(String hostname, ...) {
this.hostname = hostname;
this.serialNumber = serialNumber;
this.type = type;
}
// … (getters, some setters)
@Override
public String toString() {
return ...;
}
}
18. ENTITY
● Domain objects
e.g. “Exchange”, “Broadband Access Device”
● Entity-specific business rules
e.g. hostname format
● Tiny Types are useful
e.g. Hostname instead of String
● No Frameworks
19. USE CASE
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
USE CASES
I
core
21. USE CASE
public class GetCapacityForExchangeUseCase {
private DoesExchangeExist dataProvider1;
private GetAvailablePortsOfAllDevicesInExchange dataProvider2;
// …
public Capacity getCapacity(String exchangeCode) {
failIfExchangeDoesNotExist(exchangeCode);
List<BroadbandAccessDevice> devices =
dataProvider2
.getAvailablePortsOfAllDevicesInExchange(exchangeCode);
boolean hasAdslCapacity = hasCapacityFor(devices, DeviceType.ADSL);
boolean hasFibreCapacity = hasCapacityFor(devices, DeviceType.FIBRE);
return new Capacity(hasAdslCapacity, hasFibreCapacity);
}
// …
private void failIfExchangeDoesNotExist(String exchangeCode) {
boolean exchangeExists = dataProvider1.doesExchangeExist(exchangeCode);
if(!exchangeExists) throw new ExchangeNotFoundException();
}
}
22. USE CASE
public interface DoesExchangeExist {
boolean doesExchangeExist(String exchange);
}
public interface GetAvailablePortsOfAllDevicesInExchange {
List<BroadbandAccessDevice>
getAvailablePortsOfAllDevicesInExchange(String exchangeCode);
}
public class ExchangeNotFoundException extends RuntimeException {
}
23. USE CASE
● Pure business logic
e.g. algorithm to calculate capacity
● Defines Interfaces for the data that it requires
e.g. getAvailablePorts
● Uses entities and dataproviders
● Throws business-specific exceptions
● Not affected by changes in database or presentation
● Plain Java (no frameworks)
● We like single-method interfaces
A.k.a. Interface Segregation
24. DATA PROVIDER
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
...
dataproviders
26. DATA PROVIDER
public class BroadbandAccessDeviceDatabaseDataProvider
implements GetAllDeviceHostnames, GetSerialNumberFromModel, ... {
private JdbcTemplate jdbcTemplate;
@Override
public List<String> getAllDeviceHostnames() {
return jdbcTemplate.queryForList(
"SELECT hostname FROM clean_architecture.bb_access_device",
String.class);
}
@Override
public String getSerialNumber(String hostname) {
try {
return jdbcTemplate.queryForObject(
"SELECT serial_number FROM
clean_architecture.bb_access_device
WHERE hostname = ?",
String.class, hostname);
} catch (IncorrectResultSizeDataAccessException e) {
return null;
}
}
// …
27. DATA PROVIDER
public class BroadbandAccessDeviceNetworkDataProvider
implements GetSerialNumberFromReality {
private DeviceClient deviceClient;
// …
@Override
public String getSerialNumber(String hostname) {
try {
return deviceClient.getSerialNumber(hostname);
} catch (DeviceConnectionTimeoutException e) {
return null;
}
}
}
28. DATA PROVIDER
● Implements Interfaces defined by use case
e.g. retrieving serial number of a device
● Hides all details about where the data is from
● Could have multiple implementations
e.g. from DB or from File System
● Uses whatever framework/library is appropriate
e.g. spring-jdbc, hibernate, snmp4j, etc.
● If using ORM, you’d have a new set of entities
A.k.a. decoupled from business entities
31. ENTRYPOINT
@RestController
public class GetCapacityForExchangeEndpoint {
public static final String API_PATH = "/exchange/{exchangeCode}/capacity";
private GetCapacityForExchangeUseCase getCapacityForExchangeUseCase;
// …
@RequestMapping(value = API_PATH, method = GET)
public CapacityDto getCapacity(@PathVariable String exchangeCode) {
try {
Capacity capacity =
getCapacityForExchangeUseCase.getCapacity(exchangeCode);
return toDto(capacity);
} catch (ExchangeNotFoundException e) {
LOGGER.info("Exchange not found: {}", exchangeCode);
throw new NotFoundException();
}
}
private CapacityDto toDto(Capacity capacity) {
return new CapacityDto(
capacity.hasAdslCapacity(), capacity.hasFibreCapacity());
}
}
32. ENTRYPOINT
public class ReconcileBroadbandAccessDeviceJob implements ScheduledJob {
private ReconcileBroadbandAccessDevicesUseCase useCase;
private final JobResults jobResults;
// …
@Override public String getName() { return "..."; }
@Override public long getInitialDelay() { return 0; }
@Override public long getPeriod() { return 5; }
@Override public TimeUnit getTimeUnit() { return TimeUnit.SECONDS; }
@Override
public void run() {
LOGGER.info("Job Starting: {}...", getName());
JobResultsCount jobResultsCount = jobResults.createJobResultsCount();
OnSuccess success = jobResultsCount::success;
OnFailure failure = jobResultsCount::failure;
reconcileBroadbandAccessDevicesUseCase.reconcile(success, failure);
jobResults.recordJobResults(this, jobResultsCount);
LOGGER.info("Job Completed: {}", getName());
}
}
33. ENTRYPOINT
● Fires up a use case
● Has no business logic
● Has conversion logic
e.g. uses DTOs to return result to WEB
● Hides all details about delivery mechanism
● GUI would be an entrypoint
e.g. controllers would start use cases
● Uses whatever framework/library is appropriate
e.g. spring-mvc, jersey, quartz, etc.
36. CONFIGURATION
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.clean.example.configuration")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Configuration
public class EndpointConfiguration {
@Bean
public GetBroadbandAccessDeviceEndpoint getBroadbandAccessDeviceEndpoint() {
return new GetBroadbandAccessDeviceEndpoint(...);
}
// …other endpoints…
}
@Configuration
public class WebServerConfiguration {
// …wires web server with framework…
}
37. CONFIGURATION
● Wires everything together
e.g. using Spring or simply initialising objects
● Isolates and hides frameworks
e.g. Spring is only here
● Has the “dirty” details to make things work
e.g. initialise datasource, setup web server, etc.
38. EXAMPLE: GET CAPACITY
Rest
Entrypoint
Client
Use
Case
Data
Provider
GET /exchange/CHELSEA/capacity
useCase.getCapacity(“CHELSEA”);
dataProvider
.getAvailablePortsOfAllDevicesInExchange
(”CHELSEA”);
SELECT … WHERE code = “CHELSEA”
return broadbandAccessDevices;
countAvailablePortsOfEachType();
decideIfThereIsCapacity();
return capacity;
convertToDto(capacity);
return dto;
Status Code: 200 OK
{"hasADSLCapacity":true,
"hasFibreCapacity":true}
39. EXAMPLE: RECONCILE DEVICES
Use Case
Job
Entrypoint
Data Provider:
DB
Data Provider:
Network Device
useCase.reconcile(...);
getAllDeviceHostnames()
"SELECT hostname...”
// For each device:
getSerialNumberFromModel(hostname)
getSerialNumberFromReality(hostname)
"SELECT serial_number...”
SNMPGET …
if(serialNumberIsDifferent()) {
updateSerialNumber();
success();
}
auditResults();
41. UNIT TESTS
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
UNIT TESTs
UNIT TESTs
UNIT TESTs
UNIT TESTs
UNIT TESTs
UNIT TESTs
42. UNIT TESTS
// …
GetCapacityForExchangeEndpoint endpoint = // class under test
GetCapacityForExchangeUseCase useCase = // mock
@Test
public void returnsTheCapacityForAnExchange() throws Exception {
givenThereIsCapacityForAnExchange();
CapacityDto capacity = endpoint.getCapacity(EXCHANGE_CODE);
assertThat(capacity.getHasADSLCapacity()).isTrue();
assertThat(capacity.getHasFibreCapacity()).isTrue();
}
private void givenThereIsCapacityForAnExchange() {
when(useCase.getCapacity(EXCHANGE_CODE))
.thenReturn(new Capacity(true, true));
}
// …
43. UNIT TESTS
● TDD
A.k.a. Tests first, to drive design
● Cover every little detail
A.k.a. Aim for 100% coverage
● “Dev to dev” documentation
A.k.a. What should this class do?
● Test individual classes in isolation, very fast
44. ACCEPTANCE TESTS
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
ACC. TESTs
(BUS. REQ.)
45. ACCEPTANCE TESTS
@Notes("Calculates the remaining capacity in an exchange...")
@LinkingNote(message = "End to End test: %s", links =
{GetCapacityForExchangeEndToEndTest.class})
public class GetCapacityForExchangeAcceptanceTest extends YatspecTest {
// …mock the dependencies of the use case…
GetCapacityForExchangeUseCase useCase = // …my use case
@Test
public void
hasAdslCapacityWhenThereAreAtLeast5AdslPortsAvailableAcrossAllDevices() {
givenSomeAdslDevicesInTheExchangeWithMoreThan5AdslPortsAvailable();
whenTheCapacityForTheExchangeIsRequested();
thenThereIsAdslCapacity();
}
// …
}
47. ACCEPTANCE TESTS
● BDD
A.k.a. Conversations with the business
● Demonstrate business requirements
A.k.a. Aim to cover business scenarios
● “Business” documentation
A.k.a. What does the system do?
● Test use case in isolation, very fast
A.k.a. No GUI, no DB, etc.
● Use your favourite BDD framework
We use Yatspec
48. http
INTEGRATION TESTS
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
INTEGRATION
TESTs
INTEGRATION
TESTs
49. INTEGRATION TESTS
● Test integration with slow parts
e.g. Http, database
● “Dev” documentation
A.k.a. Does this work as expected?
● Test one layer in isolation
e.g. only rest endpoint, or only data provider
● Use whatever library makes it easy
e.g. Spring MockMVC; in-memory db
50. END-TO-END TESTS
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
http
END-TO-END
TESTs
51. END-TO-END TESTS
● Test only the critical journeys
e.g. most common happy path
● Demonstrate “business” end-to-end requirement
● Start the whole app, very slow
A.k.a. keep these to a minimum
55. PRO: FRAMEWORKS
ENTITIES
USE CASES
REST APIs
JOBS
DATABASE
FILE SYSTEM
NETWORK
DEVICES
DB
I
...
...
CONFIGURATION
coreentrypoints dataproviders
Spring WEB
Spring boot
Spring jdbc
snmp4j
quartz
56. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
frameworks
are
Isolated
58. PRO: DATABASE
● No CRUD!
● RESTful style for reading information
GET /exchange/{exchangeCode}
GET /exchange/{exchangeCode}/capacity
GET /broadbandAccessDevice/{hostname}
● Custom endpoints for business actions
POST /broadbandAccessDevice/{hostname}/makeLive
PUT /exchange/{exchangeCode}/increaseCapacity
59. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
frameworks
are
Isolated
62. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
Architecture
frameworks
are
Isolated
63. PRO: EASY TO FIND THINGS
ALL BUSINESS
LOGIC IS IN
USE CASE
64. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
frameworks
are
Isolated
66. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
Modules
isolate
changes
frameworks
are
Isolated
68. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
Modules
isolate
changes
Always
Ready
frameworks
are
Isolated
70. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
Modules
isolate
changes
Always
Ready
Swarming
frameworks
are
Isolated
72. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
Modules
isolate
changes
Always
Ready
Swarming
frameworks
are
Isolated
Nice
Monolith
74. Infrequent
deploys
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
Modules
isolate
changes
Always
Ready
Swarming
frameworks
are
Isolated
Nice
Monolith
Duplication
75. CON: IT NEEDS LOGIC
YOU NEED
INTERESTING
BUSINESS LOGIC
76. CON: IT NEEDS LOGIC
ENDPOINT
// …
@RequestMapping(value = API_PATH, method = GET)
public BroadbandAccessDeviceDto getDetails(@PathVariable String hostname) {
try {
BroadbandAccessDevice deviceDetails =
useCase.getDeviceDetails(hostname);
return toDto(deviceDetails);
} catch (DeviceNotFoundException e) {
throw new NotFoundException();
}
}
// …
USE CASE
// …
public BroadbandAccessDevice getDeviceDetails(String hostname) {
BroadbandAccessDevice device = dataProvider.getDetails(hostname);
return device;
}
// …
DATA PROVIDER
// …
return "SELECT ...";
77. Infrequent
deploys
Always
Ready
PROBLEMS? FIX!
Decisions
taken
too early
Hard to
change
Centered
around
database
Centered
around
frameworks
Business
logic is
spread
everywhere
Focused
on
technical
aspects
Slow, heavy
tests
Hard to
find things
Effective
Testing
Pyramid
frameworks
are
Isolated
Independent
from
Database
Screaming
ArchitectureAll business
logic in
use cases
Modules
isolate
changes
Nice
Monolith Swarming
Duplication
Needs
Interesting
Logic
79. RESOURCES
Example Project (with all code shown in the presentation)
● Clean Architecture Example
https://github.com/mattia-battiston/clean-architecture-example
Blogs & Articles
● The Clean Architecture
https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
● Screaming Architecture
http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html
● NODB
https://blog.8thlight.com/uncle-bob/2012/05/15/NODB.html
● Hexagonal Architecture
http://alistair.cockburn.us/Hexagonal+architecture
Videos & Presentations
● Clean Coders ep. 7: Architecture, Use Cases, and High Level Design
https://cleancoders.com/episode/clean-code-episode-7/show
● Robert C. Martin - Clean Architecture
https://vimeo.com/43612849
● Robert C. Martin - Clean Architecture and Design
https://www.youtube.com/watch?v=Nsjsiz2A9mg
80. really, really appreciated! Help me improve
@BattistonMattia
mattia.battiston@gmail.com
mattia-battiston
THANK YOU!