Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts.
It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question “How can we validate that our API is working as intended?”
In this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design. I will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.
This document provides an overview of Gatling, an open-source load testing tool developed using Scala. It discusses Gatling's focus on web applications, simplicity, high performance, good reports, and easy integration with CI tools. It then covers setting up Gatling, including prerequisites, writing a sample test, and key concepts like scenarios, simulations, and reports.
Github Copilot and tools that help us code better are cool. But I’m lucky if I spend 90 minutes a day writing code. We really need to optimize the hours we spend reviewing code, updating tickets and tracing where our code is deployed. Learn how I save an hour a day streamlining non-coding tasks.
This talk is unique because 99% of developer productivity tools and hacks are about coding faster, better, smarter. And yet the vast majority of our time is spent doing all of this other stuff. After I started focusing on optimizing the 10 hours I spend every day on non-coding tasks, I found I my productivity went up and my frustration at annoying stuff went way down. I cover how to save time by reducing cognitive load and by cutting menial, non-coding tasks that we have to perform 10-50 times every day. For example:
Bug or hotfix comes through and you want to start working on it right away so you create a branch and start fixing. What you don’t do is create a Jira ticket but then later your boss/PM/CSM yells at your due to lack of visibility. I share how I automated ticket creation in Slack by correlating Github to Jira.
You have 20 minutes until your next meeting and you open a pull request and start a review. But you get pulled away half way through and when you come back the next day you forgot everything and have to start over. Huge waste of time. I share an ML job I wrote that tells me how long the review will take so I can pick PRs that fit the amount of time I have.
You build. You ship it. You own it. Great. But after I merge my code I never know where it actually is. Did the CI job fail? Is it release under feature flag? Did it just go GA to everyone? I share a bot I wrote that personally tells me where my code is in the pipeline after it leaves my hands so I can actually take full ownership without spending tons of time figuring out what code is in what release.
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)Alvaro Sanchez-Mariscal
The document discusses how a company called Odobo improved their testing process by defining a unified testing framework using Groovy, Spock, and Geb. This allowed both developers and QA engineers to write automated tests in the same framework, eliminating duplicated efforts. Key aspects of the framework included using Gradle for building, Groovy as the programming language, Spock as the testing framework, and Geb for browser automation. It provided benefits like increased code reuse and happier testers across both dev and QA teams.
The ability of a system to respond gracefully to an unexpected hardware or software failure.
There are many levels of fault tolerance, the lowest being the ability to continue operation in the event of a power failure. Many fault-tolerant computer systems mirror all operations -- that is, every operation is performed on two or more duplicate systems, so if one fails the other can take over.
In most cases it could be achieved by redundancy in application design and set of patterns and approaches to software design.
The document introduces SpecFlow, an open source tool for .NET that supports behavior-driven development (BDD) and acceptance test-driven development (ATDD). It discusses BDD and ATDD workflows and guidelines. The document also overview SpecFlow's features like support for platforms, test runners, and installation methods. It demonstrates using Gherkin language to write executable specifications and SpecFlow's workflow of specifying features, developing code, and testing.
It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question “How can we validate that our API is working as intended?”
In this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design. I will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.
This document provides an overview of Gatling, an open-source load testing tool developed using Scala. It discusses Gatling's focus on web applications, simplicity, high performance, good reports, and easy integration with CI tools. It then covers setting up Gatling, including prerequisites, writing a sample test, and key concepts like scenarios, simulations, and reports.
Github Copilot and tools that help us code better are cool. But I’m lucky if I spend 90 minutes a day writing code. We really need to optimize the hours we spend reviewing code, updating tickets and tracing where our code is deployed. Learn how I save an hour a day streamlining non-coding tasks.
This talk is unique because 99% of developer productivity tools and hacks are about coding faster, better, smarter. And yet the vast majority of our time is spent doing all of this other stuff. After I started focusing on optimizing the 10 hours I spend every day on non-coding tasks, I found I my productivity went up and my frustration at annoying stuff went way down. I cover how to save time by reducing cognitive load and by cutting menial, non-coding tasks that we have to perform 10-50 times every day. For example:
Bug or hotfix comes through and you want to start working on it right away so you create a branch and start fixing. What you don’t do is create a Jira ticket but then later your boss/PM/CSM yells at your due to lack of visibility. I share how I automated ticket creation in Slack by correlating Github to Jira.
You have 20 minutes until your next meeting and you open a pull request and start a review. But you get pulled away half way through and when you come back the next day you forgot everything and have to start over. Huge waste of time. I share an ML job I wrote that tells me how long the review will take so I can pick PRs that fit the amount of time I have.
You build. You ship it. You own it. Great. But after I merge my code I never know where it actually is. Did the CI job fail? Is it release under feature flag? Did it just go GA to everyone? I share a bot I wrote that personally tells me where my code is in the pipeline after it leaves my hands so I can actually take full ownership without spending tons of time figuring out what code is in what release.
DevQA: make your testers happier with Groovy, Spock and Geb (Greach 2014)Alvaro Sanchez-Mariscal
The document discusses how a company called Odobo improved their testing process by defining a unified testing framework using Groovy, Spock, and Geb. This allowed both developers and QA engineers to write automated tests in the same framework, eliminating duplicated efforts. Key aspects of the framework included using Gradle for building, Groovy as the programming language, Spock as the testing framework, and Geb for browser automation. It provided benefits like increased code reuse and happier testers across both dev and QA teams.
The ability of a system to respond gracefully to an unexpected hardware or software failure.
There are many levels of fault tolerance, the lowest being the ability to continue operation in the event of a power failure. Many fault-tolerant computer systems mirror all operations -- that is, every operation is performed on two or more duplicate systems, so if one fails the other can take over.
In most cases it could be achieved by redundancy in application design and set of patterns and approaches to software design.
The document introduces SpecFlow, an open source tool for .NET that supports behavior-driven development (BDD) and acceptance test-driven development (ATDD). It discusses BDD and ATDD workflows and guidelines. The document also overview SpecFlow's features like support for platforms, test runners, and installation methods. It demonstrates using Gherkin language to write executable specifications and SpecFlow's workflow of specifying features, developing code, and testing.
This document discusses patterns and practices for building living documentation using SpecFlow and Gherkin. It provides an overview of using SpecFlow in a project to gather requirements, develop tests, and build and release software. It also discusses special challenges like formalizing user stories and scenarios, dealing with cross-cutting concerns, and using test contexts and drivers for automation. The document is presented by Christian Hassa and Gaspar Nagy from TechTalk on their experiences using SpecFlow for the SpecLog project.
How to test-drive your Qt QML code. Overview on how you do simple testing, UI level testing, synchronous testing, data-driven testing.
These are the slides used on the Tampere MeeGo meetup on March 15, 2011 and text may not be super clear for those who didn't attend the meetup. You can still download the example and examine it.
This document provides an introduction to Behavior Driven Development (BDD) with Cucumber. It discusses that BDD uses examples expressed in a way that can be automated to reduce misunderstandings. Stories are written in business language and describe requirements and acceptance criteria. Scenarios specify conditions a story must meet to be complete. Cucumber is a tool that executes plain text functional descriptions as automated tests. It supports collaboration between stakeholders and allows writing scenarios before code.
[FullStack NYC 2019] Effective Unit Tests for JavaScriptHazem Saleh
The document discusses code coverage and mutation testing tools for JavaScript. It introduces karma-coverage as a code coverage plugin that can be used with Karma test runner. Traditional code coverage only measures executed code and does not guarantee tests will fail on logic changes. Mutation testing seeds code with faults to evaluate test strength by whether faults are killed by tests. The document demonstrates Stryker, a mutation testing tool for JavaScript that works with popular frameworks and provides test reports. It provides sample URLs and recommends using Stryker with Angular CLI 6.1+.
Yet Another Continuous Integration StoryAnton Serdyuk
This document describes the continuous integration process used at Startup Labs, Inc. It discusses using a single branch development model with feature flags instead of feature branches. Automated tests are run on every commit, with the goal of fast builds. Tests are run in parallel across multiple agents. Manual testing is done after automated testing. Load and migration tests are run before production deployments. The goals are agile development with small changes and frequent releases through continuous integration and deployment.
Unit Testing your React / Redux app (@BucharestJS)Alin Pandichi
React and Redux took the world by storm. These JavaScript libraries allow you to write applications consisting of reusable components while avoiding bugs related to side-effects. But I suspect that developers do not unit test their React/Redux code. Or at least not as much as they could. During this talk, I will showcase the unit tests we have written for our eventriX product. These tests run fast and cover the most important aspects of our client-side code running in the browser. These practical real-world examples could inspire you to write more and better unit tests for your own React/Redux application.
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
Behavior-Driven Development and Acceptance Testing are heavily intertwined and in many aspects are one and the same. Both focus on starting at the outer layers of your application by concentrating on what matter to users; behavior. In this session/workshop we'll talk about how testing can be used both for specifying your application yet to be develop expected behavior and as accurate, running documentation that can be used to validate your stakeholder's acceptance criteria. We'll talk about the different types of testing and do a few hands-on exercises to flesh out a Rails application with RSpec and Capybara.
Continuous Deployment of Architectural ChangeMatt Graham
Continuous deployment has proven to be a successful and even addicting part of Etsy's engineering culture. See where it's applicable, some of the tools that make it easy, and the kind of architectural change that it makes possible.
This document discusses C# language features from versions 1 through 6 and previews features planned for C# 7. It provides a brief history of C# and highlights key new capabilities introduced in each version such as generics, LINQ, asynchronous programming and dynamic features. It also summarizes upcoming C# 7 features like local functions, records, and pattern matching. The document aims to inform developers about the evolution of C# and new capabilities that improve productivity.
The document discusses various concepts and practices related to agile software development, including:
- The agile manifesto which emphasizes individuals, working software, customer collaboration, and responding to change.
- Core agile concepts like short iterations, planning one iteration at a time, frequent code releases and customer feedback.
- Specific agile frameworks like eXtreme Programming (XP), Scrum, and Kanban/Lean.
- Testing approaches like unit tests, integration/acceptance tests, test-driven development (TDD), and behavior-driven development (BDD).
- Other practices like continuous integration, domain-driven design (DDD), and DevOps which emphasize collaboration between developers and operations
The document discusses Behavior Driven Development (BDD) as an agile approach. It outlines how traditional projects can fail by delivering late, the wrong thing, or being unstable. BDD focuses on working software, customer collaboration, and responding to change. It describes the costs of going agile and three principles of BDD: only do enough upfront work to get started, deliver stakeholder value, and describe behavior at any level of detail. BDD tests what an object does, versus traditional test-driven development (TDD) testing what an object is. An example is provided of building a Set implementation in Java using BDD.
This document discusses test-driven development (TDD) and provides an agenda for a workshop on TDD. It begins by outlining the essence of TDD as write a failing test, make the test pass, refactor. It then uses an example of building a throttler to limit requests to demonstrate TDD. It notes some challenges with TDD like flaky tests and discusses architectural approaches like hexagonal architecture and using ports and adapters. It concludes by proposing a live coding example of designing a server using TDD and tests.
The document describes how PeerTransfer changed their development process from Scrum to Kanban. Some key issues with Scrum included developers having to switch contexts weekly and too many bugs to test within a sprint. With Kanban, work is pulled in a continuous flow through stages like development, code review, testing, and deployment. Kanban also uses work-in-progress limits to prevent bottlenecks and encourage pairing, and estimates to add planning structure while focusing in sprints. The team aims for quality with practices like test automation, feature reviews, and pair programming.
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
In this introduction to Test Driven Development (TDD) or Behaviour Driven Development (BDD) we give a high level description of what it is and why it is useful for developers. Then we go into some details on stubs and mocks, test data, UI testing, SQL testing, JavaScript testing, web services testing and how to start doing TDD/BDD on an existing code base.
Automating Your Way to Greatness by Combining OutSystems CI/CD With the Power...OutSystems
Having built-in CI/CD capabilities has always been a core tenet of the OutSystems platform. As customer factories have grown and CI/CD pipelines have become more complex, OutSystems has developed an integration with some of the leading CI/CD DevOps tools in the market, Jenkins, and Azure DevOps to tackle some of the challenges of managing enterprise-grade CI/CD pipelines.
This document discusses common patterns used in test automation frameworks, including page object, business layer, singleton, composition, and factory patterns. It describes the page object pattern and limitations like test intent becoming imperative. The business layer page object pattern addresses these by validating business requirements. Test data patterns are also discussed, with criteria like data being complex, unique, and potentially dynamic. External files, properties, and databases are examples of specifying test data. Locator patterns include specifying locators in page objects or separate files. Overall, patterns aid in communication, reduce complexity, and help tests be of production quality and easier to implement, maintain, and scale. The best pattern depends on the specific context.
The document discusses quality assurance (QA) and outlines a QA recipe. It defines QA as a continuous process involving commitment, standards, testing to avoid defects, and validation. It emphasizes that QA is a team effort, not separate from development. The outlined QA recipe incorporates unit testing, functional testing like smoke and regression, performance testing, and code reviews. It concludes that creating a QA culture and seeing QA as more than just testing are important to success.
Comparing Agile QA Approaches to End-to-End TestingKatie Chin
The document compares agile QA approaches like end-to-end testing and discusses how Quid uses both Selenium and RainforestQA for testing. It notes that while Selenium allows for fast automated testing, it is tied to the frontend implementation. RainforestQA uses human testers which is easier to maintain but slower. For complex products like Quid, RainforestQA has scaled testing better and freed up engineer time for more exploratory testing.
1) Start with writing user stories to define desired behaviors.
2) Automate scenarios written in Gherkin to test behaviors.
3) Implement features to make scenarios pass.
4) Repeat process of writing scenarios, implementing features, and running automated tests.
One of the main advantages of PHP is that it allows you and your company to build up projects in no time and with immediate feedback and business value. Sometimes, however, fast growth and unprevented complexities could make your codebase more and more difficult to manage as time passes and new features are added.Domain Driven Design can be an elegant solution to the problem, but introducing it in mid-large sized projects is not always easy: you have to deal with difficulties at technical, team and knowledge levels. This talk focuses on how to approach the change in your codebase and in your team mindset without breaking legacy code or stopping the development in favor of neverending refactoring sessions.
WEBASSEMBLY - What's the right thing to write? -Shin Yoshida
https://github.com/wbcchsyn/slide-WEBASSEMBLY-whats-the-right-thing-to-write.git
What is WebAssembly?
According to webassembly.org,
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine.
I think that it is a standard to make the programming logic abstract.
“standard to make the programming logic abstract.”
What does it mean?
What is the advantage?
Let’s talk about WebAssembly while looking back on the computer history.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with one Invariant Sections: “Shin Yoshida wrote this document with the goal of contributing to a fair and safe world. Funai Soken Digital Incorporated agrees with the vision and compensated him for his work.” no Front-Cover Texts, and no Back-Cover Text. A copy of the license is included in the section entitled “GNU Free Documentation License”.
https://github.com/wbcchsyn/slide-WEBASSEMBLY-whats-the-right-thing-to-write.git
This document discusses patterns and practices for building living documentation using SpecFlow and Gherkin. It provides an overview of using SpecFlow in a project to gather requirements, develop tests, and build and release software. It also discusses special challenges like formalizing user stories and scenarios, dealing with cross-cutting concerns, and using test contexts and drivers for automation. The document is presented by Christian Hassa and Gaspar Nagy from TechTalk on their experiences using SpecFlow for the SpecLog project.
How to test-drive your Qt QML code. Overview on how you do simple testing, UI level testing, synchronous testing, data-driven testing.
These are the slides used on the Tampere MeeGo meetup on March 15, 2011 and text may not be super clear for those who didn't attend the meetup. You can still download the example and examine it.
This document provides an introduction to Behavior Driven Development (BDD) with Cucumber. It discusses that BDD uses examples expressed in a way that can be automated to reduce misunderstandings. Stories are written in business language and describe requirements and acceptance criteria. Scenarios specify conditions a story must meet to be complete. Cucumber is a tool that executes plain text functional descriptions as automated tests. It supports collaboration between stakeholders and allows writing scenarios before code.
[FullStack NYC 2019] Effective Unit Tests for JavaScriptHazem Saleh
The document discusses code coverage and mutation testing tools for JavaScript. It introduces karma-coverage as a code coverage plugin that can be used with Karma test runner. Traditional code coverage only measures executed code and does not guarantee tests will fail on logic changes. Mutation testing seeds code with faults to evaluate test strength by whether faults are killed by tests. The document demonstrates Stryker, a mutation testing tool for JavaScript that works with popular frameworks and provides test reports. It provides sample URLs and recommends using Stryker with Angular CLI 6.1+.
Yet Another Continuous Integration StoryAnton Serdyuk
This document describes the continuous integration process used at Startup Labs, Inc. It discusses using a single branch development model with feature flags instead of feature branches. Automated tests are run on every commit, with the goal of fast builds. Tests are run in parallel across multiple agents. Manual testing is done after automated testing. Load and migration tests are run before production deployments. The goals are agile development with small changes and frequent releases through continuous integration and deployment.
Unit Testing your React / Redux app (@BucharestJS)Alin Pandichi
React and Redux took the world by storm. These JavaScript libraries allow you to write applications consisting of reusable components while avoiding bugs related to side-effects. But I suspect that developers do not unit test their React/Redux code. Or at least not as much as they could. During this talk, I will showcase the unit tests we have written for our eventriX product. These tests run fast and cover the most important aspects of our client-side code running in the browser. These practical real-world examples could inspire you to write more and better unit tests for your own React/Redux application.
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
Behavior-Driven Development and Acceptance Testing are heavily intertwined and in many aspects are one and the same. Both focus on starting at the outer layers of your application by concentrating on what matter to users; behavior. In this session/workshop we'll talk about how testing can be used both for specifying your application yet to be develop expected behavior and as accurate, running documentation that can be used to validate your stakeholder's acceptance criteria. We'll talk about the different types of testing and do a few hands-on exercises to flesh out a Rails application with RSpec and Capybara.
Continuous Deployment of Architectural ChangeMatt Graham
Continuous deployment has proven to be a successful and even addicting part of Etsy's engineering culture. See where it's applicable, some of the tools that make it easy, and the kind of architectural change that it makes possible.
This document discusses C# language features from versions 1 through 6 and previews features planned for C# 7. It provides a brief history of C# and highlights key new capabilities introduced in each version such as generics, LINQ, asynchronous programming and dynamic features. It also summarizes upcoming C# 7 features like local functions, records, and pattern matching. The document aims to inform developers about the evolution of C# and new capabilities that improve productivity.
The document discusses various concepts and practices related to agile software development, including:
- The agile manifesto which emphasizes individuals, working software, customer collaboration, and responding to change.
- Core agile concepts like short iterations, planning one iteration at a time, frequent code releases and customer feedback.
- Specific agile frameworks like eXtreme Programming (XP), Scrum, and Kanban/Lean.
- Testing approaches like unit tests, integration/acceptance tests, test-driven development (TDD), and behavior-driven development (BDD).
- Other practices like continuous integration, domain-driven design (DDD), and DevOps which emphasize collaboration between developers and operations
The document discusses Behavior Driven Development (BDD) as an agile approach. It outlines how traditional projects can fail by delivering late, the wrong thing, or being unstable. BDD focuses on working software, customer collaboration, and responding to change. It describes the costs of going agile and three principles of BDD: only do enough upfront work to get started, deliver stakeholder value, and describe behavior at any level of detail. BDD tests what an object does, versus traditional test-driven development (TDD) testing what an object is. An example is provided of building a Set implementation in Java using BDD.
This document discusses test-driven development (TDD) and provides an agenda for a workshop on TDD. It begins by outlining the essence of TDD as write a failing test, make the test pass, refactor. It then uses an example of building a throttler to limit requests to demonstrate TDD. It notes some challenges with TDD like flaky tests and discusses architectural approaches like hexagonal architecture and using ports and adapters. It concludes by proposing a live coding example of designing a server using TDD and tests.
The document describes how PeerTransfer changed their development process from Scrum to Kanban. Some key issues with Scrum included developers having to switch contexts weekly and too many bugs to test within a sprint. With Kanban, work is pulled in a continuous flow through stages like development, code review, testing, and deployment. Kanban also uses work-in-progress limits to prevent bottlenecks and encourage pairing, and estimates to add planning structure while focusing in sprints. The team aims for quality with practices like test automation, feature reviews, and pair programming.
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
In this introduction to Test Driven Development (TDD) or Behaviour Driven Development (BDD) we give a high level description of what it is and why it is useful for developers. Then we go into some details on stubs and mocks, test data, UI testing, SQL testing, JavaScript testing, web services testing and how to start doing TDD/BDD on an existing code base.
Automating Your Way to Greatness by Combining OutSystems CI/CD With the Power...OutSystems
Having built-in CI/CD capabilities has always been a core tenet of the OutSystems platform. As customer factories have grown and CI/CD pipelines have become more complex, OutSystems has developed an integration with some of the leading CI/CD DevOps tools in the market, Jenkins, and Azure DevOps to tackle some of the challenges of managing enterprise-grade CI/CD pipelines.
This document discusses common patterns used in test automation frameworks, including page object, business layer, singleton, composition, and factory patterns. It describes the page object pattern and limitations like test intent becoming imperative. The business layer page object pattern addresses these by validating business requirements. Test data patterns are also discussed, with criteria like data being complex, unique, and potentially dynamic. External files, properties, and databases are examples of specifying test data. Locator patterns include specifying locators in page objects or separate files. Overall, patterns aid in communication, reduce complexity, and help tests be of production quality and easier to implement, maintain, and scale. The best pattern depends on the specific context.
The document discusses quality assurance (QA) and outlines a QA recipe. It defines QA as a continuous process involving commitment, standards, testing to avoid defects, and validation. It emphasizes that QA is a team effort, not separate from development. The outlined QA recipe incorporates unit testing, functional testing like smoke and regression, performance testing, and code reviews. It concludes that creating a QA culture and seeing QA as more than just testing are important to success.
Comparing Agile QA Approaches to End-to-End TestingKatie Chin
The document compares agile QA approaches like end-to-end testing and discusses how Quid uses both Selenium and RainforestQA for testing. It notes that while Selenium allows for fast automated testing, it is tied to the frontend implementation. RainforestQA uses human testers which is easier to maintain but slower. For complex products like Quid, RainforestQA has scaled testing better and freed up engineer time for more exploratory testing.
1) Start with writing user stories to define desired behaviors.
2) Automate scenarios written in Gherkin to test behaviors.
3) Implement features to make scenarios pass.
4) Repeat process of writing scenarios, implementing features, and running automated tests.
One of the main advantages of PHP is that it allows you and your company to build up projects in no time and with immediate feedback and business value. Sometimes, however, fast growth and unprevented complexities could make your codebase more and more difficult to manage as time passes and new features are added.Domain Driven Design can be an elegant solution to the problem, but introducing it in mid-large sized projects is not always easy: you have to deal with difficulties at technical, team and knowledge levels. This talk focuses on how to approach the change in your codebase and in your team mindset without breaking legacy code or stopping the development in favor of neverending refactoring sessions.
WEBASSEMBLY - What's the right thing to write? -Shin Yoshida
https://github.com/wbcchsyn/slide-WEBASSEMBLY-whats-the-right-thing-to-write.git
What is WebAssembly?
According to webassembly.org,
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine.
I think that it is a standard to make the programming logic abstract.
“standard to make the programming logic abstract.”
What does it mean?
What is the advantage?
Let’s talk about WebAssembly while looking back on the computer history.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with one Invariant Sections: “Shin Yoshida wrote this document with the goal of contributing to a fair and safe world. Funai Soken Digital Incorporated agrees with the vision and compensated him for his work.” no Front-Cover Texts, and no Back-Cover Text. A copy of the license is included in the section entitled “GNU Free Documentation License”.
https://github.com/wbcchsyn/slide-WEBASSEMBLY-whats-the-right-thing-to-write.git
The PHP world is spinning quite fast these days. There’s a lot to keep up with. You can’t be an expert in all subjects, so you need a way to find out what’s relevant for you and your team. Which approaches to software development would be useful? Which programming paradigms could help you write better code? And which architectural styles will help your application to survive in this quickly changing world? In this talk I’ll help you answer these questions by taking a bird’s-eye view. I will quickly guide you along some of the most fascinating topics in modern PHP development: DDD, BDD, TDD, hexagonal architecture, CQRS, event sourcing and micro-services. We’ll see how these things are related to each other, and how understanding and applying them can help you improve your software projects in many ways.
How to Implement Domain Driven Design in Real Life SDLCAbdul Karim
The document discusses the traditional approach to software development and some of its shortcomings. It then introduces Domain-Driven Design (DDD) as an alternative approach that focuses on designing the system around the problem domain from the top-down rather than the bottom-up. Some key DDD concepts discussed include ubiquitous language, core domain, bounded contexts, entities, value objects, aggregates and aggregate roots, and persistence ignorance. The document uses examples from designing a residential building to help explain these DDD concepts.
Modelling a complex domain with Domain-Driven DesignNaeem Sarfraz
Domain-Driven Design is an approach to modelling business complexity explicitly in your software. This deck of slides runs through the key concepts focusing on both the strategic and tactical aspects of DDD.
Finding balance of DDD while your application growsCarolina Karklis
This document contains the key points from a presentation on Domain Driven Design (DDD). It discusses the big picture of DDD, including defining the domain and ubiquitous language. It explains why practicing DDD is beneficial and provides approaches for different project scenarios based on complexity. The presenter advocates starting with strategic modeling rather than tactical patterns, and provides examples of patterns that can be used after establishing boundaries and context with modeling.
Is Multi-Cloud good or bad? How about Serverless? The answer to all these questions is Yes, sometimes. Whether you're new to all this or a long-time industry veteran, you'll surely come away from this approachable talk with a new understanding of cutting edge technology and actionable insights on how to make smart trade offs.
Vancouver Cloud Summit 2024 (2024-04-22)
Following on from the success of last year, this annual event for London's architect community will have architectural innovation as a theme this year, and particularly CQRS. At the DDD eXchange we will feature leading thinkers and architects who will share their experience and Eric Evans is the programme lead.
SAD01 - An Introduction to Systems Analysis and DesignMichael Heron
The document discusses software analysis and design. It introduces a case study of a large multiplayer online game called Epitaph that will be used to illustrate analysis and design concepts. Analysis involves generating an understanding of a system through techniques like object-oriented modeling. Design details how the system will function by showing interactions and interfaces through diagrams. The goal is effective communication between developers and stakeholders.
Slides for my architectural session at the event: Docker From Zero To Hero.
We talked about what kind of expertises are need in order to build a true Microservices Solution; you'll need to understand some of the fundamentals on which Microservices is built upon: SOA, EDA and DDD just to name a few, then you can move to the container world.
Original event link: https://www.eventbrite.it/e/biglietti-docker-from-zero-to-hero-83372825365#
Codemash 2.0.1.4: Tech Trends and Pwning Your Pwn CareerKevin Davis
The document discusses various tech trends including the future of C# programming language, Hadoop and big data solutions, JavaScript frameworks, software architecture principles, and work independence and remote work. The key points are that C# will continue to be supported and updated, Hadoop is useful for large data problems, JavaScript remains popular for client-side development, simplicity and iteration are important to architecture, and remote work is increasingly common and possible for tech careers.
I've spent the last years modelling complex businesses and Software Architectures with EventStorming. The original recipe evolved a lot from the initial one. This is EventStorming state of the art.
Keynote presented at GOTO Chicago (2018-04-26)
Video available at https://www.youtube.com/watch?v=AbgsfeGvg3E
Everything is changing. Everything is new. Frameworks, platforms and trends are displaced on a weekly basis. Skills are churning.
And yet... Beneath this seemingly turbulent flow there is a slow current, strong and steady, changing relatively little over the decades. Concepts with a long history appear in new forms and fads and technologies. Principles are revisited. Ideas once lost to the mainstream are found again.
In this keynote we revisit the present through the past, looking at the enduring principles that shape programming languages, architecture, development practice and development process, the ideas that cycle round, each time becoming perhaps a little better defined, a little more mature, and look to see what else might be on the horizon.
Worse Is Better, for Better or for WorseKevlin Henney
Presented at GeeCON (15th May 2014)
Over two decades ago, Richard Gabriel proposed the idea of “Worse Is Better” to explain why some things that are designed to be pure and perfect are eclipsed by solutions that are seemingly compromised and imperfect. This is not simply the observation that things should be better but are not, or that flawed and ill-considered solutions are superior to those created with intention, but that many solutions that are narrow and incomplete work out better than the solutions conceived of as being comprehensive and complete. Whether it is programming languages, operating systems, development processes or development practices, we find many examples of this in software development, some more provocative and surprising than others.
In this talk we revisit the original premise and question, and look at how this approach to development can still teach us something surprising and new.
This document summarizes key aspects of .NET architecture for enterprises. It describes the roles and responsibilities of software architects, principles of architecture like separation of concerns and low coupling/high cohesion, and common architectural patterns. It also outlines common layers in applications like the business layer, services layer, data access layer, and presentation layer, describing what they are, responsibilities, and design patterns associated with each layer. The document provides guidance on how to design maintainable and testable systems with a focus on separation of concerns, low coupling between components, and following architectural best practices.
This workshop focuses on domain driven design and how to achieve it effectively. It also focus on bridging gaps while gathering requirements from business stakeholders using event storming workshops.
How We end the Walking Dead in the Enterprise - Session Sponsored by VersentAmazon Web Services
Versent is an Australian technology consulting firm focused on helping enterprises adopt cloud technologies and DevOps practices. They discuss how to identify "walking dead" legacy services and products, prevent technological "infection" through cloud adoption and DevOps practices, and treat existing "infections" by establishing cloud platforms, automation, and continuous delivery. Customers highlighted include large Australian companies that implemented cloud environments, content management systems, API platforms, and data analytics environments on AWS in under 6 months through Versent's assistance.
Domain-driven design is a collaborative process involving both domain experts and software practitioners that attempts to address issues of complexity in software. This process is described in the book Domain-Driven Design written by Eric Evans. Domain-driven design starts with the assertion that complexity is in the domain, not in the technology. Accordingly, we must let technology play a supporting role.
A person practicing domain-driven design does not attempt to model reality. Instead, domain experts and software practitioners use a mental model as a tool for solving problems within a given domain. The domain experts and software practitioners collaborate to explore and develop this model. We will look at the concept of a bounded context within which models can be isolated and explored. We will talk about domain-driven design's building block patterns including entities, value objects, aggregates, repositories, services, and domain events. We will see how test-driven development can be used as a means of exploring the model.
It's easy to say... Microservices! Reality is we need to learn and apply concepts coming from many disciplines like SOA, EDA and DDD just to name a few! Mix them with some ALM and technical processes around Packaging and Deploying... and maybe then you get a true Microservices solution.
Terratest - Automation testing of infrastructureKnoldus Inc.
TerraTest is a testing framework specifically designed for testing infrastructure code written with HashiCorp's Terraform. It helps validate that your Terraform configurations create the desired infrastructure, and it can be used for both unit testing and integration testing.
Getting Started with Apache Spark (Scala)Knoldus Inc.
In this session, we are going to cover Apache Spark, the architecture of Apache Spark, Data Lineage, Direct Acyclic Graph(DAG), and many more concepts. Apache Spark is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters.
Secure practices with dot net services.pptxKnoldus Inc.
Securing .NET services is paramount for protecting applications and data. Employing encryption, strong authentication, and adherence to best coding practices ensures resilience against potential threats, enhancing overall cybersecurity posture.
Distributed Cache with dot microservicesKnoldus Inc.
A distributed cache is a cache shared by multiple app servers, typically maintained as an external service to the app servers that access it. A distributed cache can improve the performance and scalability of an ASP.NET Core app, especially when the app is hosted by a cloud service or a server farm. Here we will look into implementation of Distributed Caching Strategy with Redis in Microservices Architecture focusing on cache synchronization, eviction policies, and cache consistency.
Introduction to gRPC Presentation (Java)Knoldus Inc.
gRPC, which stands for Remote Procedure Call, is an open-source framework developed by Google. It is designed for building efficient and scalable distributed systems. gRPC enables communication between client and server applications by defining a set of services and message types using Protocol Buffers (protobuf) as the interface definition language. gRPC provides a way for applications to call methods on a remote server as if they were local procedures, making it a powerful tool for building distributed and microservices-based architectures.
Using InfluxDB for real-time monitoring in JmeterKnoldus Inc.
Explore the integration of InfluxDB with JMeter for real-time performance monitoring. This session will cover setting up InfluxDB to capture JMeter metrics, configuring JMeter to send data to InfluxDB, and visualizing the results using Grafana. Learn how to leverage this powerful combination to gain real-time insights into your application's performance, enabling proactive issue detection and faster resolution.
Intoduction to KubeVela Presentation (DevOps)Knoldus Inc.
KubeVela is an open-source platform for modern application delivery and operation on Kubernetes. It is designed to simplify the deployment and management of applications in a Kubernetes environment. KubeVela is a modern software delivery platform that makes deploying and operating applications across today's hybrid, multi-cloud environments easier, faster and more reliable. KubeVela is infrastructure agnostic, programmable, yet most importantly, application-centric. It allows you to build powerful software, and deliver them anywhere!
Stakeholder Management (Project Management) PresentationKnoldus Inc.
A stakeholder is someone who has an interest in or who is affected by your project and its outcome. This may include both internal and external entities such as the members of the project team, project sponsors, executives, customers, suppliers, partners and the government. Stakeholder management is the process of managing the expectations and the requirements of these stakeholders.
Introduction To Kaniko (DevOps) PresentationKnoldus Inc.
Kaniko is an open-source tool developed by Google that enables building container images from a Dockerfile inside a Kubernetes cluster without requiring a Docker daemon. Kaniko executes each command in the Dockerfile in the user space using an executor image, which runs inside a container, such as a Kubernetes pod. This allows building container images in environments where the user doesn’t have root access, like a Kubernetes cluster.
Efficient Test Environments with Infrastructure as Code (IaC)Knoldus Inc.
In the rapidly evolving landscape of software development, the need for efficient and scalable test environments has become more critical than ever. This session, "Streamlining Development: Unlocking Efficiency through Infrastructure as Code (IaC) in Test Environments," is designed to provide an in-depth exploration of how leveraging IaC can revolutionize your testing processes and enhance overall development productivity.
Exploring Terramate DevOps (Presentation)Knoldus Inc.
Terramate is a code generator and orchestrator for Terraform that enhances Terraform's capabilities by adding features such as code generation, stacks, orchestration, change detection, globals, and more . It's primarily designed to help manage Terraform code at scale more efficiently . Terramate is particularly useful for managing multiple Terraform stacks, providing support for change detection and code generation 2. It allows you to create relationships between stacks to improve your understanding and control over your infrastructure . One of the key features of Terramate is its ability to detect changes at both the stack and module level. This capability allows you to identify which stacks and resources have been altered and selectively determine where you should execute commands.
Clean Code in Test Automation Differentiating Between the Good and the BadKnoldus Inc.
This session focuses on the principles of writing clean, maintainable, and efficient code in the context of test automation. The session will highlight the characteristics that distinguish good test automation code from bad, ultimately leading to more reliable and scalable testing frameworks.
Integrating AI Capabilities in Test AutomationKnoldus Inc.
Explore the integration of artificial intelligence in test automation. Understand how AI can enhance test planning, execution, and analysis, leading to more efficient and reliable testing processes. Explore the cutting-edge integration of Artificial Intelligence (AI) capabilities in Test Automation, a transformative approach shaping the future of software testing. This session will delve into practical applications, benefits, and considerations associated with infusing AI into test automation workflows.
State Management with NGXS in Angular.pptxKnoldus Inc.
NGXS is a state management pattern and library for Angular. NGXS acts as a single source of truth for your application's state - providing simple rules for predictable state mutations. In this session we will go through the main for components of NGXS -Store, Actions, State, and Select.
Authentication in Svelte using cookies.pptxKnoldus Inc.
Svelte streamlines authentication with cookies, offering a secure and seamless user experience. Effortlessly manage sessions by storing tokens in cookies, ensuring persistent logins. With Svelte's simplicity, implement robust authentication mechanisms, enhancing user security and interaction.
OAuth2 Implementation Presentation (Java)Knoldus Inc.
The OAuth 2.0 authorization framework is a protocol that allows a user to grant a third-party web site or application access to the user's protected resources, without necessarily revealing their long-term credentials or even their identity. It is commonly used in scenarios such as user authentication in web and mobile applications and enables a more secure and user-friendly authorization process.
Supply chain security with Kubeclarity.pptxKnoldus Inc.
Kube clarity is a comprehensive solution designed to enhance supply chain security within Kubernetes environments. Kube clarity enables organizations to identify and mitigate potential security threats throughout the software development and deployment process.
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML ParsingKnoldus Inc.
In this session, we will delve into the world of web scraping with JSoup, an open-source Java library. Here we are going to learn how to parse HTML effectively, extract meaningful data, and navigate the Document Object Model (DOM) for powerful web scraping capabilities.
Akka gRPC Essentials A Hands-On IntroductionKnoldus Inc.
Dive into the fundamental aspects of Akka gRPC and learn to leverage its power in building compact and efficient distributed systems. This session aims to equip attendees with the essential skills and knowledge to leverage Akka and gRPC effectively in building robust, scalable, and distributed applications.
Entity Core with Core Microservices.pptxKnoldus Inc.
How Developers can use Entity framework(ORM) which provides a structured and consistent way for microservices to interact with their respective database, prompting independence, scaliblity and maintainiblity in a distributed system, and also provide a high-level abstraction for data access.
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
A Comprehensive Guide to DeFi Development Services in 2024Intelisync
DeFi represents a paradigm shift in the financial industry. Instead of relying on traditional, centralized institutions like banks, DeFi leverages blockchain technology to create a decentralized network of financial services. This means that financial transactions can occur directly between parties, without intermediaries, using smart contracts on platforms like Ethereum.
In 2024, we are witnessing an explosion of new DeFi projects and protocols, each pushing the boundaries of what’s possible in finance.
In summary, DeFi in 2024 is not just a trend; it’s a revolution that democratizes finance, enhances security and transparency, and fosters continuous innovation. As we proceed through this presentation, we'll explore the various components and services of DeFi in detail, shedding light on how they are transforming the financial landscape.
At Intelisync, we specialize in providing comprehensive DeFi development services tailored to meet the unique needs of our clients. From smart contract development to dApp creation and security audits, we ensure that your DeFi project is built with innovation, security, and scalability in mind. Trust Intelisync to guide you through the intricate landscape of decentralized finance and unlock the full potential of blockchain technology.
Ready to take your DeFi project to the next level? Partner with Intelisync for expert DeFi development services today!
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
This presentation provides valuable insights into effective cost-saving techniques on AWS. Learn how to optimize your AWS resources by rightsizing, increasing elasticity, picking the right storage class, and choosing the best pricing model. Additionally, discover essential governance mechanisms to ensure continuous cost efficiency. Whether you are new to AWS or an experienced user, this presentation provides clear and practical tips to help you reduce your cloud costs and get the most out of your budget.
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...alexjohnson7307
Predictive maintenance is a proactive approach that anticipates equipment failures before they happen. At the forefront of this innovative strategy is Artificial Intelligence (AI), which brings unprecedented precision and efficiency. AI in predictive maintenance is transforming industries by reducing downtime, minimizing costs, and enhancing productivity.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Tatiana Kojar
Skybuffer AI, built on the robust SAP Business Technology Platform (SAP BTP), is the latest and most advanced version of our AI development, reaffirming our commitment to delivering top-tier AI solutions. Skybuffer AI harnesses all the innovative capabilities of the SAP BTP in the AI domain, from Conversational AI to cutting-edge Generative AI and Retrieval-Augmented Generation (RAG). It also helps SAP customers safeguard their investments into SAP Conversational AI and ensure a seamless, one-click transition to SAP Business AI.
With Skybuffer AI, various AI models can be integrated into a single communication channel such as Microsoft Teams. This integration empowers business users with insights drawn from SAP backend systems, enterprise documents, and the expansive knowledge of Generative AI. And the best part of it is that it is all managed through our intuitive no-code Action Server interface, requiring no extensive coding knowledge and making the advanced AI accessible to more users.
3. Agenda (Part 2)
➢
Domain Specific Language
➢
DSL : Introduction
➢
Anatomy
➢
Composing DSL
➢
Why Scala for DSL
➢
DSL Design in Scala
➢
Best Practice
4. WHAT IS DOMAIN ?
Domain is a sphere of knowledge, influence and activity
- wikipedia
5. WHAT IS DOMAIN ?
Domain is a sphere of knowledge, influence and activity
- wikipedia
Domain Driven Design is a methodology for evolving software that closely matches
our business requirement.
6. WHAT IS DOMAIN ?
Domain is a sphere of knowledge, influence and activity
- wikipedia
Domain Driven Design is a methodology for evolving software that closely matches our
business requirement.
Domain-driven design (DDD) is an approach to developing software for complex needs
by deeply connecting the implementation to an evolving model of the core business
concepts.
8. How to Identify core domain?
Ask questions like
➢ What keeps you awake at night
9. How to Identify core domain?
Ask questions like
➢ What keeps you awake at night.
➢ What makes your system worth writing.
10. How to Identify core domain?
Ask questions like
➢ What keeps you awake at night.
➢ What makes your system worth writing.
➢ Why not buy it off the self.
11. How to Identify core domain?
Ask questions like
➢ What keeps you awake at night.
➢ What makes your system worth writing.
➢ Why not buy it off the self.
➢ Why not outsource it.
12. How to Identify core domain?
Ask questions like
➢ What keeps you awake at night.
➢ What makes your system worth writing.
➢ Why not buy it off the self.
➢ Why not outsource it.
15. What is Model ?
Don't think of the model as code.
Models are abstract set of tools used to solve domain problem.
16. What is Model ?
Don't think of the model as code.
Models are abstract set of tools used to solve problem within a domain.
Don't try to model reality.
19. Everything simple is false
Everything which is complex is unusable
- Paul Valery
20. Ubiquitous Language
In order to search freelancer or project, we will consider inflectional and thesaurus feature of
elasticsearch to make the search more relevant. Additionally we will also exclude the stop words
from the search to make it more accurate.
21. Ubiquitous Language
In order to search freelancer or project, we will consider inflectional and thesaurus feature of
elasticsearch to make the search more relevant. Additionally we will also exclude the stop words
from the search to make it more accurate.
22. Ubiquitous Language
In the search functionality we will consider all the synonyms of the search phrase so that it does not
exclude relevant results. Moreover we will not differentiate any search word by its number (singular
or plural), tense, participle etc so that the result becomes more accurate. Additionally as expected in
any search, we will ignore all the noise words that do not have any value in the search. Such noise
words could be “am”, “but”, “where”, “about” etc.
28. Bounded Context
A domain can have multiple model , each model can be represented by its bounded context.
Delineate applicability of particular module.
Explore model in isolation.
Own code and persistence mechanism.
29.
30.
31. Context Map
Draw a context map of all the bounded context.
Map what actually exists , not what you wish exsited.
32. Domain Object
Entity
➢ Must have an identity
➢ Must have a life cycle
➢ Most likely Mutable
➢ May be composed of other entities and value objects.
Value object
➢ No Identity
➢ Defined by its encapsulated attributes
➢ Treat value objects as immutable.
➢ Delegate business logic to value object.
33. Aggregates
➢
Group of related entities and value objects
➢
Useful when defining transaction, distribution and persistence.
➢
If two things need to be consistent together
Aggregate together
➢
Else
They belongs to separate aggregates.
➢
Within a bounded context there may have multiple aggregates.
34. Aggregate root
➢
Designate one entity as aggregate root.
➢
Allow external reference to only the aggregate root.
➢
Persist aggregate root along with its object graph.
35.
36.
37.
38. Services
A place for operations that aren't naturally part of a domain object.
Services should be treated as immutable.
Operations on services are stateless.
40. What is Domain Event ?
Something important that happens within the domain that may lead to a stat change is
domain object.
41. What is Domain Event ?
Something important that happens within the domain that may lead to a stat change is
domain object.
A domain event can lead to another domain event.
eg. 6 balls can trigger an over.
42. What is Domain Event ?
Something important that happens within the domain that may lead to a stat change is
domain object.
A domain event can lead to another domain event.
eg. 6 balls can trigger an over.
Domain events are immutable.
43. What is Domain Event ?
Something important that happens within the domain that may lead to a stat change is
domain object.
A domain event can lead to another domain event.
eg. 6 balls can trigger an over.
Domain events are immutable.
44. Event Log
Domain event should be logged into event log.
Current state can be computed by reading the event log.
If necessary for performance , current state can be cached.
Can also serve as an audit log.
45. Command Query Responsibility Segregation
(CQRS)
Separate Read/Write model.
Define one model for writing data (command)
Define another model for reading data (query)
Both model operate on same aggregate.
46.
47.
48. References
➢
Domain Driven Design : Tackling complexity in the heart of software (By Eric Evans).
➢
http://martinfowler.com/tags/domain%20driven%20design.html
➢
http://dddcommunity.org/
➢
https://www.youtube.com/watch?v=RNUn2R7TptM
➢
http://www.slideshare.net/thinkddd