This document introduces Interaction-Driven Design (IDD) and discusses concepts related to application architecture and testing strategies. It describes how IDD uses an outside-in approach where the design starts from actions and behaviors rather than data structures. Classes closer to user inputs focus on flow control and delegation, while those closer to outputs focus on specific behaviors with less delegation. The document also covers domain-driven design concepts like entities, aggregates, and repositories, and discusses strategies for unit, integration, acceptance, and end-to-end testing.
software engineering , its characteristic ,changing nature of software,evolving nature of software,legacy software,generic view of software,process flow ,umbrella activity,CMMI,PROCESS ASSESSMENT ,team and personal software process
The alumni manager based application that can be accessed throughout world. Anyone can access the search Engine to know about any alumni of that college but can’t able to add. Alumni can only update the database when they are in the college. The application for the storage of the data has been planned. The database connectivity is planned using the “SQL Connection” methodology. The standards of security and data protective mechanism have been given a big choice for proper usage. Alumni Management System The application takes care of different modules and their associated reports, which are produced as per the applicable strategies and standards that are put forwarded by the administrative staff.
Parent communication register android applicationBhadra Gowdra
In this new era of Science and Technology, computer is one of the most important components in our life. Works can be done in a better way by the help of computer.
The Main aim of our project is to automate the attendance in the form of Android Mobile Application. Our intention is to establish a good communication between Student Mentor and parent.We have seen over the years that the process of manual attendance is being carried out across almost all educational institutions. The process is not only time consuming but also sometimes yield inefficient results in the false marking and calculation of attendance. We need not maintain pen and paper based attendance registers. Following this thought, we have proposed a Parent communication register android application APP by which we notify parents via SMS OR a call Notification system which is implemented on Android mobile application.This Android application will give the students attendance information and SMS notification feature whereby every parent will be periodically notified regarding his/her child attendance. Our system primarily focuses on building an efficient and user friendly Android mobile application. The application will be installed on the Mentor phone which runs android OS. It intends to provide an interface to the professor who will require a user id and password to carry out the task. Apart from that, the application would support strong user authentication and quick transmission of data.
software engineering , its characteristic ,changing nature of software,evolving nature of software,legacy software,generic view of software,process flow ,umbrella activity,CMMI,PROCESS ASSESSMENT ,team and personal software process
The alumni manager based application that can be accessed throughout world. Anyone can access the search Engine to know about any alumni of that college but can’t able to add. Alumni can only update the database when they are in the college. The application for the storage of the data has been planned. The database connectivity is planned using the “SQL Connection” methodology. The standards of security and data protective mechanism have been given a big choice for proper usage. Alumni Management System The application takes care of different modules and their associated reports, which are produced as per the applicable strategies and standards that are put forwarded by the administrative staff.
Parent communication register android applicationBhadra Gowdra
In this new era of Science and Technology, computer is one of the most important components in our life. Works can be done in a better way by the help of computer.
The Main aim of our project is to automate the attendance in the form of Android Mobile Application. Our intention is to establish a good communication between Student Mentor and parent.We have seen over the years that the process of manual attendance is being carried out across almost all educational institutions. The process is not only time consuming but also sometimes yield inefficient results in the false marking and calculation of attendance. We need not maintain pen and paper based attendance registers. Following this thought, we have proposed a Parent communication register android application APP by which we notify parents via SMS OR a call Notification system which is implemented on Android mobile application.This Android application will give the students attendance information and SMS notification feature whereby every parent will be periodically notified regarding his/her child attendance. Our system primarily focuses on building an efficient and user friendly Android mobile application. The application will be installed on the Mentor phone which runs android OS. It intends to provide an interface to the professor who will require a user id and password to carry out the task. Apart from that, the application would support strong user authentication and quick transmission of data.
E Roger Pressman Bruce Maxim Software Engineering_ A Practitioner's Approach 8e.
Chapter 5:
5.1 What is Agility?
5.3 What is an Agile Process?
5.3.1 Agility Principles.
5.3.2 The Politics of Agile Development
5.4 Extreme Programming
5.4.1 The XP process
5.5 Other Agile process Models
5.5.1 Scrum
What is a Use Case
A formal way of representing how a business system interacts with its environment
Illustrates the activities that are performed by the users of the system
A scenario-based technique in the UML
A sequence of actions a system performs that yields a valuable result for a particular actor.
Farsight's Employee Leave Management System streamlines communication between your HR and employees and facilitates simple yet efficient management of employee leave.
E-Leave Management ensures that all leave taken and leave request are properly accounted for. Your staffs can apply, approve and view leave records without the hassel and delay of going through the admin staff- it's all at your fingertips with any time, anywhere access.
For Employees - This system allows them to easily determine their vacation availability and request leave online.
For Managers -Leave approval no longer involve trails of paperwork.The system provides full audit trails of your staff's leave balances and plans.
An E-Mail alert will be sent to the approving officer.Once the leave has been approved / rejected by the officer, an E-Mail alert will be sent back to the employee as well.
Our E-Leave Solution is integrated with our payroll System (Payroll Insights). Solution is highly flexible and can be integrated with 3rd party solutions.
New Software Development Proposal PowerPoint Presentation SlidesSlideTeam
If your company needs to submit a New Software Development Proposal PowerPoint Presentation Slides look no further. Our researchers have analyzed thousands of proposals on this topic for effectiveness and conversion. Just download our template, add your company data and submit to your client for a positive response. https://bit.ly/3665dhN
In systems engineering and software engineering, requirements analysis encompasses those tasks that go into determining the needs or conditions to meet for a new or altered product or project, taking account of the possibly conflicting requirements of the various stakeholders, analyzing, documenting, validating and managing software or system requirements.
(IMPROVED VERSION FROM GEECON)
How can we quickly tell what an application is about? How can we quickly tell what it does? How can we distinguish business concepts from architecture clutter? How can we quickly find the code we want to change? How can we instinctively know where to add code for new features? Purely looking at unit tests is either not possible or too painful. Looking at higher-level tests can take a long time and still not give us the answers we need. For years, we have all struggled to design and structure projects that reflect the business domain.
In this talk Sandro will be sharing how he designed the last application he worked on, twisting a few concepts from Domain-Driven Design, properly applying MVC, borrowing concepts from CQRS, and structuring packages in non-conventional ways. Sandro will also be touching on SOLID principles, Agile incremental design, modularisation, and testing. By iteratively modifying the project structure to better model the application requirements, he has come up with a design style that helps developers create maintainable and domain-oriented software.
E Roger Pressman Bruce Maxim Software Engineering_ A Practitioner's Approach 8e.
Chapter 5:
5.1 What is Agility?
5.3 What is an Agile Process?
5.3.1 Agility Principles.
5.3.2 The Politics of Agile Development
5.4 Extreme Programming
5.4.1 The XP process
5.5 Other Agile process Models
5.5.1 Scrum
What is a Use Case
A formal way of representing how a business system interacts with its environment
Illustrates the activities that are performed by the users of the system
A scenario-based technique in the UML
A sequence of actions a system performs that yields a valuable result for a particular actor.
Farsight's Employee Leave Management System streamlines communication between your HR and employees and facilitates simple yet efficient management of employee leave.
E-Leave Management ensures that all leave taken and leave request are properly accounted for. Your staffs can apply, approve and view leave records without the hassel and delay of going through the admin staff- it's all at your fingertips with any time, anywhere access.
For Employees - This system allows them to easily determine their vacation availability and request leave online.
For Managers -Leave approval no longer involve trails of paperwork.The system provides full audit trails of your staff's leave balances and plans.
An E-Mail alert will be sent to the approving officer.Once the leave has been approved / rejected by the officer, an E-Mail alert will be sent back to the employee as well.
Our E-Leave Solution is integrated with our payroll System (Payroll Insights). Solution is highly flexible and can be integrated with 3rd party solutions.
New Software Development Proposal PowerPoint Presentation SlidesSlideTeam
If your company needs to submit a New Software Development Proposal PowerPoint Presentation Slides look no further. Our researchers have analyzed thousands of proposals on this topic for effectiveness and conversion. Just download our template, add your company data and submit to your client for a positive response. https://bit.ly/3665dhN
In systems engineering and software engineering, requirements analysis encompasses those tasks that go into determining the needs or conditions to meet for a new or altered product or project, taking account of the possibly conflicting requirements of the various stakeholders, analyzing, documenting, validating and managing software or system requirements.
(IMPROVED VERSION FROM GEECON)
How can we quickly tell what an application is about? How can we quickly tell what it does? How can we distinguish business concepts from architecture clutter? How can we quickly find the code we want to change? How can we instinctively know where to add code for new features? Purely looking at unit tests is either not possible or too painful. Looking at higher-level tests can take a long time and still not give us the answers we need. For years, we have all struggled to design and structure projects that reflect the business domain.
In this talk Sandro will be sharing how he designed the last application he worked on, twisting a few concepts from Domain-Driven Design, properly applying MVC, borrowing concepts from CQRS, and structuring packages in non-conventional ways. Sandro will also be touching on SOLID principles, Agile incremental design, modularisation, and testing. By iteratively modifying the project structure to better model the application requirements, he has come up with a design style that helps developers create maintainable and domain-oriented software.
How can we quickly tell what an application is about? How can we quickly tell what it does? How can we distinguish business concepts from architecture clutter? How can we quickly find the code we want to change? How can we instinctively know where to add code for new features? Purely looking at unit tests is either not possible or too painful. Looking at higher-level tests can take a long time and still not give us the answers we need. For years, we have all struggled to design and structure projects that reflect the business domain.
In this talk Sandro will be sharing how he designed the last application he worked on, twisting a few concepts from Domain-Driven Design, properly applying MVC, borrowing concepts from CQRS, and structuring packages in non-conventional ways. Sandro will also be touching on SOLID principles, Agile incremental design, modularisation, and testing. By iteratively modifying the project structure to better model the product requirements, he has come up with a design style that helps developers create maintainable and domain-oriented software.
Complementary slide deck for my hands-on coding session on testing and refactoring legacy code.
Code can be found here: https://github.com/sandromancuso/trip-service-kata
How much do we know about Object-Oriented Programming?Sandro Mancuso
This talk goes through many of the Object-Oriented Programming principles and characteristics. Things that all developers should have in mind while writing code.
BDD with Cucumber-JVM as presented at I T.A.K.E. Unconference in Bucharest 2014TSundberg
Behaviour Driven Development, BDD, is a way to increase communication between stakeholders in a project and at the same time create executable examples.
This presentation is about a lecture I gave within the "Software systems and services" immigration course at the Gran Sasso Science Institute, L'Aquila (Italy): http://cs.gssi.infn.it/.
http://www.ivanomalavolta.com
The bottleneck has moved, developers are not the bottleneck. Requirements errors are the greatest source of defects and quality problems. Requirements engineering agile style.
What are the actors? What are they used for? And how can we develop them? And how are they published and used on Azure? Let's see how it's done in this session
Action-Domain-Responder: A Web-Specific Refinement of Model-View-ControllerPaul Jones
Using Model-View-Controller as a pattern to describe stateless HTTP interactions has always been a bit of a kludge. There simply hasn't been a better pattern web applications -- until now.
ADR (Action-Domain-Responder) represents a refinement of generic MVC as an application architecture specifically tuned to the web. In this talk, we will discuss various patterns of overall application architecture, including MVC, MVP, PAC, DCI, RMR, and others. We will find out how the ADR pattern arises from generic MVC, and how it provides a better description of how web applications actually work. Finally, we will go over examples of how to architect an ADR application, as well as how to convert from an MVC architcture to an ADR one.
[2017/2018] Introduction to Software ArchitectureIvano Malavolta
This presentation is about a lecture I gave within the "Software systems and services" immigration course at the Gran Sasso Science Institute, L'Aquila (Italy): http://cs.gssi.infn.it/.
http://www.ivanomalavolta.com
[2016/2017] Introduction to Software ArchitectureIvano Malavolta
This presentation is about a lecture I gave within the "Software systems and services" immigration course at the Gran Sasso Science Institute, L'Aquila (Italy): http://cs.gssi.infn.it/.
http://www.ivanomalavolta.com
Similar to Crafted Design - LJC World Tour Mash Up 2014 (20)
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
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.
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Shahin Sheidaei
Games are powerful teaching tools, fostering hands-on engagement and fun. But they require careful consideration to succeed. Join me to explore factors in running and selecting games, ensuring they serve as effective teaching tools. Learn to maintain focus on learning objectives while playing, and how to measure the ROI of gaming in education. Discover strategies for pitching gaming to leadership. This session offers insights, tips, and examples for coaches, team leads, and enterprise leaders seeking to teach from simple to complex concepts.
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.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
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/
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
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.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
A Comprehensive Look at Generative AI in Retail App Testing.pdfkalichargn70th171
Traditional software testing methods are being challenged in retail, where customer expectations and technological advancements continually shape the landscape. Enter generative AI—a transformative subset of artificial intelligence technologies poised to revolutionize software testing.
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
How Recreation Management Software Can Streamline Your Operations.pptxwottaspaceseo
Recreation management software streamlines operations by automating key tasks such as scheduling, registration, and payment processing, reducing manual workload and errors. It provides centralized management of facilities, classes, and events, ensuring efficient resource allocation and facility usage. The software offers user-friendly online portals for easy access to bookings and program information, enhancing customer experience. Real-time reporting and data analytics deliver insights into attendance and preferences, aiding in strategic decision-making. Additionally, effective communication tools keep participants and staff informed with timely updates. Overall, recreation management software enhances efficiency, improves service delivery, and boosts customer satisfaction.
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.
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
2. What is this application about?
What are the main concepts?
What does it do?
What are the main features?
Where do I change it?
Where do I add a new feature or fix a bug?
3. Badly structured packages/namespaces
Architectural and design concepts mixed with domain
Classes and methods are too low level
Acceptance tests either absent or badly written
9. Views impact MVC structure
Depending on the view technology, Views and Controllers
responsibility becomes more/less coupled or blurred.
Traditional multi-page web applications
Single-page AJAX applications with stateless backend
Console-based applications
Desktop applications
Games
Mobile / tablets
External systems (talking via Queues / Webservices)
However, the model should remain unchanged.
10. Anaemic
Domain
MVC
used
badly
Fat
Controllers
Coupling
with MVC
framework
11. MVC – A Macro Organisational Pattern
V C M
Model
Delivery
Mechanism
12. “Model” is overloaded and
confusing
Model (M in MVC)
Domain Model (DDD)
View Model
Data Model
Entities & Active Record
and other artificial definitions from MVC frameworks
Associated with the persistence mechanism?
13. M => Domain Model (DDD)
Domain Model combines state and behaviour,
with more focus on the latter.
DDD define a few building blocks to your domain:
Entities
Value Objects
Factories
Repositories
Services
Application
Domain
Infrastructure
Aggregates
15. Embedded Domain Model
<< Web app >>
Model V C DM
Infrastructure Infrastructure
Delivery
Mechanism
DB
Queue
16. Deployable Domain Model
<< mobile app >>
<< external system >>
Delivery
Mechanisms
DB
<< deployable app >>
Model
Infrastructure
DM
<<W/S>>
<<W/S>>
17. Event-Driven Domain Model
<<event 1>>
<< external app 1 >> << deployable app >>
<< external app 2 >>
Delivery
Queue DM
Queue
Model
Infrastructure
Mechanisms DB
<<event 2>>
18. Domain Model
building blocks & responsibilities
Model
DM
A 1
R 3
DS 1
DS 2
DS 3
R 1
S
A 2
Infrastructure Impl
Impl
<< web app >>
A = Action, DS = Domain Service, S = Infra. Service, R = Repository
19. Behaviour: Action, Domain Service or Entity?
Action Defines the action that our domain model must
Domain
Service
Entity
execute.
Behaviour related to multiple instances of the same entity
or different entities.
Behaviour that doesn’t fit any specific entity.
Behaviour related to the data contained in a single
entity instance
20. Repositories (not DAOs)
Model
<<repository>>
Library
<<repository>>
Users
Infrastructure
<<Mongo>>
Books
Domain Model
<<Oracle>>
Users
“A Repository represents all objects of a certain type as a conceptual set. It acts
like a collection, except with more elaborate querying capability.”
~ Eric Evans
21. An example would be good…
Payment
User Account
has prime account?
validate
Make Validator
Payment
<<interface>>
Card Processor
Order
History Orders
Checker
Users
valid account?
Payment
pay Gateway
process card
store order
<<interface>>
Email Sender
email confirmation
Action Domain Service Infra. Service Repository Class
22. Class responsibility
Produces the output
End of flow
Domain Model entry
point Domain Concept
entry point
Input Output
C A DS R
cl
End of code branch
First to handle input
Start of the flow
Execution Flow
Closer to the input: Control flow, higher level abstraction, detailed work is delegated
(e.g. ProcessTrade (A), MakePayment (A)) — More suitable for Outside-In TDD
(mockist).
Closer to the output / end of branch: Specific and detailed behaviour, no delegation,
lower level abstraction (e.g. Parse XML (Parser), Create User (Repository))
23. Domain Model collaborations guideline
C1
A 1
X
A 2
DS 1
DS 2
DS 3
DS 4
R 1
cl
cl
cl
R 4
cl
X
C2 A 3 X R 5 Except for read model
C = Controller, A = Action, DS = Domain Service, R = Repository, cl = class
24. Command & Query Actions
<< web app >>
Model
R
<<Write Model>>
DS
A
Model
A R
<<Read Model>>
DB
DB
Queue <<domain events>>
26. Web project responsibility
Delivery Mechanism: Defines the user journey
Control flow (invoke actions)
JSON / XML parsers or converters
View Models, validators, etc
Static files
29. What is inside model packages?
Entity (part of Book aggregate)
Aggregate root (entity)
Repository
Domain Service
Part of aggregate behaviour
Value Object (part of Book aggregate)
Value Object (part of User aggregate)
Aggregate root (entity)
Repository
Domain Service
30. What is inside infrastructure?
Repository implementations
CreditCardProcessor implementations
Interfaces defined by the domain.
Dependency Inversion Principle (DIP)
31. Interaction-Driven Design – IDD
(Outside-In design)
Input Output
C A DS R
cl
Execution Flow
Design Flow
Starting from the action, model the expected behaviour (outside-in)
Entities (data structures) will emerge in order to satisfy the behaviour
Focus is on the behaviour of the system and not on how data is stored/related
32. DB
HTML
JSON
Feature
1 Horizontal
+
‘N’ Vertical slices
34. Defining testing strategies and boundaries
Types of tests
• Unit
• Integration
• Acceptance
• Journey
• Black box
• Component
• System
• Functional
• Alpha
• Beta
• Conformance
• …
35. Testing strategies: User Journey
Model
DM
A 1
A 2
Designed according to User Stories
and Features
<< web app >>
<<fake>>
A 1
<<fake>>
A 2
Tests the journey a user will have to do something
useful in the system
Application is tested as a black box normally using
a BDD framework
Actions are faked. We just want to know if the
application presents the user with the correct
journey
36. Testing strategies: Acceptance (Action / Behavioural)
Tests a behaviour (action) provided by the system
A DS 1
<<mock>>
DS 2 R R
Infrastructure Impl
Action is the entry point and
all external dependencies are
stubbed
Domain Model
Normally tested using a BDD
framework
37. Testing strategies: Integration
Tests the classes at the system boundaries
Domain Model
A DS 1
<<mock>>
DS 2 R R
Infrastructure Impl
Normally done using an in-memory
Database using a unit
testing framework
38. Testing strategies: Unit (Class level)
Unit test at class/method level
Infrastructure
Impl
A DS 1
DS 2 R R
Domain Model
DS 1
DS 2
All collaborators are
mocked / stubbed
(spies)
39. Testing strategies: End-to-End
Model
DM
A 1
R 3
DS 1
DS 2
DS 3
R 1
S
Infrastructure Impl
Impl
A 2
Full application deployed
<< web app >>
Uses BDD framework, accessing a testing database and
fake external dependencies
Very few tests at this level, just to make sure
application is wired properly
41. The problem is not TDD. The problem is our
inability to design software well.
42. cl cl
Input Output
C A DS R
DS
Execution Flow
Outside-In TDD
Design Flow
cl
cl
cl
The closer to the input a class is, the more flow control and delegation it does.
The closer to the output a class is, the more specific it is and less delegation it does
44. Answering the two original questions
What is the application about? (main concepts)
Expressed by nouns
What does the application do? (main capabilities)
Expressed by verbs
(Actions)
In this talk I’ll be sharing how I’ve been designing software in the past few years. I’ll be talking about a design style that I’m calling Interaction-Driven Design (IDD)
To be catchy it needs to be Japanese or xDD. Chose the latter cos I don’t speak Japanese.
For years I’ve been trying to find ways to, while looking from above, answer the following questions:
Looking from above: controllers, repositories, managers, services, etc.
Layers vs. domain? How do they fit together?
How many of you are happy with your package structure?
Confusing. I have no idea what this application is about or what it does.
What does this application do? What is it about?
Gives me some information on what the application is about but not what it does.
Loads of duplication
Very poluted
Books and Users. Cool, but what does this application do?
Once again, gives me no information on what the application is about or what it does.
But I know it is a web app though. Sigh.
Awesome. It’s a web application. So?
So, how do I solve the problem? How do I answer the questions?
But first things first…
Before getting into how I’m organising/structuring my code, we need some background to justify my decisions
It was only later, in a 1988 article in Glenn E. Krasner and Stephen T. Pope that MVC was expressed as general concept, in the The Journal of Object Technology
Anaemic Domain: Model is only composed by entities and data structures
Fat Controllers: Without a place to put business logic, the logic is put on the controllers
What should we have in the model? What is model?
Active Record is a software design abomination.
Start our application with this clear separation or refactor towards it.
Keeping them separately gives us options.
Domain Model embedded in a Web Application
V/C belong to the application (main)
Domain Model wrapped in a deployable application
Expose a W/S for mobile apps / Web apps / External Systems
This is similar to Hexagonal Architecture (Ports & Adapters belong to Infrastructure)
Mobile app could have the V/C
Event-Driven application
- Actions are the entry point to the domain model (control flow delegating to Domain Services)
- Actions can use factories to create domain objects according to the input (normally not in the domain format)
- Domain Services are the entry point to a domain concept.
Repositories are helpers to the Domain Service and should not be exposed.
- I name repositories using the plural (collection) of the domain concept they represent (Users, Books)
Repository vs. DAO (Former behaves as a collection. Latter is a pattern to access data)
Data Access Object (DAO) is a commonly used pattern to persist entities (data) into a database. (CRUD)
Classes closer to the output are more suitable for Classic TDD, unless they are close to the boundaries (that need to be mocked in both TDD styles)
Controller can talk to one or more than one action
UC can talk to one or more DS or classes
DS can talk to other DS or Infra Service
Repositories are never exposed. Just accessed by its own DS. Exception is on Read Model
- Write model throws domain events
Query model listens to domain events and populate “read” DB
Query UC return data according to the application needs (Report, Complex Screen with denormalised data, etc)
Command Actions go though the domain model, delegating to domain services
Query Actions may go to a read model instead, querying with joins returning VOs that are specific to the UI.
No need to organise them in different packages (using command & query as names)
Controllers talk the Actions
Controllers should be thin, invoking an action, and choosing the view to be displayed (maybe creating page objects or converting to JSON?)
web: View (page objects)
Web: Infrastructure (JSON / XML parsers or converters)
Controllers talk the Actions
Controllers should be thin, invoking an action, and choosing the view to be displayed (maybe creating page objects or converting to JSON?)
web: View (page objects)
Web: Infrastructure (JSON / XML parsers or converters)
In a simple project (CRUD), action may be as simple as Insert, Delete, Update User
Not all action se cases have a direct correlation to entities (AddBookToWishList)
Epics/Themes: Candidates for bounded contexts / (micro?) services
MakePayment UC does not need to have a related Entity, neither FindRecommendations.
MakePayment may sent information out to a different system
FindRecommendations may return a list of products (after a very complicated logic, taking to consideration user attributes and buying patterns)
Many of the DDD building blocks
Layers don’t make business sense and should not be mapped. Only developers care about them.
Decouples the architectural decisions and layers from the domain model.
A class API (public interface) should be designed from the client’s perspective.
Doing otherwise leads to over-engineering and YAGNI – You Ain’t Gonna Need It
Businesses are not interested in how data is stored or related. They are interested in the behaviour of the software.
First, discuss with your team and define the scope of each test
Then, chose a name for each scope
Mocking the backend makes these tests run really fast and predictable.
Easy to setup
Tests multiple classes together.
External dependencies are stubbed
Tests multiple classes together.
External dependencies are stubbed
Tests multiple classes together.
External dependencies are stubbed
Unit (class / method level)
Acceptance (through action, in-memory/mocked DB/infrastructure)
Integration (via the boundaries, in-memory DB)
User Journey (Via the UI – mocking action)
End-to-end (black box, very few, just sunny day scenario)
The closer to the input a class is, the more flow control and delegation it does.
The closer to the output a class is, the more specific and less delegation it does.
How to enable good design and test? You need freedom to design and test. Don’t use frameworks.
Take control of your application. Don’t be scared to write code.
Embedded Jetty, Scalatra, SparkJava
Anorm (back to JDBC basics)
Transaction service
Remember when Spring was a lightweight alternative to J2EE?
London School vs. Chicago/Detroit School
The closer to the input a class is, the more flow control and delegation it does.
The closer to the output a class is, the more specific and less delegation it does.
Listen to your tests: shallow advice.
Klaus story about music.
A class API (public interface) should be designed from the client’s perspective.
Doing otherwise leads to over-engineering and YAGNI – You Ain’t Gonna Need It
Businesses are not interested in how data is stored or related. They are interested in the behaviour of the software.
Ports and Adapters only necessary if you are deploying your core domain on its own.
Businesses can move just as fast as they can create or change software, making them hostages of their own software.
Codurance:
We believe that softtware dev is a craft.
We believe that how it is done is as important as getting it done.
We believe that delivering well-crafted code is the best way we can help our clients.
Codurance: We believe that softtware dev is a craft. We believe that how it is done is as important as getting it done.
We believe that delivering well-crafted code is the best way we can help our clients.