1. The document discusses the Command Query Responsibility Segregation (CQRS) pattern for separating queries from commands in distributed systems. It advocates keeping queries simple with a two-tier architecture without data transfer objects.
2. It also recommends designing user interfaces to capture user intent, having commands reflect that intent. Validation should be simple and business rules focused.
3. The CQRS pattern publishes commands asynchronously to improve scalability. Domain models only persist needed data and implement business logic rather than queries or validation.
When many developers think of Command-Query Responsibility Segregation (CQRS), they envision separate datastores for reads and writes, linked together by some kind of event-based synchronization mechanism. The reality is that for many domains this is overkill, while for others it still doesn’t solve fundamental concurrency issues.
When many developers think of Command-Query Responsibility Segregation (CQRS), they envision separate datastores for reads and writes, linked together by some kind of event-based synchronization mechanism. The reality is that for many domains this is overkill, while for others it still doesn’t solve fundamental concurrency issues.
This webinar delivers an overview of:
- The GDPR and what it means for Cloud service providers
- The technical and organisational measures applicable to Cloud service providers
- The policies and procedures required by the GDPR
- The 'privacy by design' and 'privacy by default' requirements
- The rights of data subjects
- Breach notification obligations
- The impact of subcontracting on Cloud service providers
- ISO 27018 and implementing security controls for personally identifiable information in the Cloud.
A recording of this webinar is available here:
https://www.youtube.com/watch?v=8i7adBubDzw
Revising policies and procedures under the new EU GDPRIT Governance Ltd
This webinar covers:
- An overview of the regulatory landscape
- Territorial scope
- Remedies, liabilities and penalties
- Principles of the EU GDPR
- Policies - GDPR reference
- What if we don't have policies in place?
- What policies are required?
- How to develop a policy?
A recording of this webinar is available here:
https://www.youtube.com/watch?v=tzsXsf1058Q&feature=youtu.be
This webinar gives an overview of:
- The regulation landscape
- Territorial scope
- Remedies, liabilities and penalties
- Privacy notices
- The right of data subject
- Consent
- Data processing
- Profiling or "automated individual decision-making"
- International marketing and data transfers
A recording of this webinar is available here:
https://www.youtube.com/watch?v=Vr_CT24v2iI
Rethinking Segregation of Duties: Where Is Your Business Most Exposed?SAPinsider Events
View this session from GRC 2015 in Las Vegas. Coming to Europe! www.GRC2015.com
Rethinking Segregation of Duties: Where Is Your Business Most Exposed? by Erin Hughes, SAP
Changes in technology and/or the structure of an organization can quickly cause segregation of duties (SoD) policies to become obsolete and dated, yet many companies fail to periodically reassess them as identifying where poor segregation of duties exist continues to be challenging. During this session, gain:
- Practical advice for staying on top of your current policies and segregation of duties rule set
- A clear understanding of the cost and impact of access control violations
- Tips to govern access across your entire landscape and understand financial exposure due to SoD violations using SAP Access Control and SAP Access Violation Management by Greenlight
- Guidance on how to centralize monitoring, investigation tracking, and resolution of access violations
CyNation: 7 Things You Should Know about EU GDPRIryna Chekanava
An overview of EU GDPR key characteristics, its origins and legal implications of non-compliance. It also provides the initial steps that an organisation needs to follow to operate in compliance with new cyber security regulatory landscape.
To become compliant with upcoming GDPR, organisations cannot rely solely on rules, these will protect against the known threats, while Machine Learning protects from the unknown.
DevOps vs GDPR: How to Comply and Stay AgileBen Saunders
A joint webinar between Contino and Delphix explaining how DevOps, Cloud and Data Virtualization can be used to accelerate application delivery, yet still allow organisations to remain GDPR compliant.
What is GDPR and why does it matter to me? Desynit
An introduction to the most radical changes to data protection in the last 10 years. Stephan Chandler-Garcia from Digital Catapult gives you an overview of the General Data Protection Regulation and how you can stay ahead of the curve as a Salesforce user. We will be looking at new ways of thinking about your customers data and new ways of managing consent.
This webinar covers:
- An overview of the regulatory landscape
- Territorial scope
- Remedies, liabilities and penalties
- Security of personal data
- Data protection officer
View the webinar here: https://www.youtube.com/watch?v=u285y9hhgOo
This webinar provides an overview of:
- The regulatory landscape
- Territorial scope
- Remedies, liabilities and penalties
- Risk management and the GDPR
- Legal requirement for a DPIA
- Why and how to conduct a data flow mapping exercise
- What are the challenges?
- What is an information flow?
- The questions to ask
- Data flow mapping techniques.
A recording of this webinar is available here:
https://youtu.be/EZFgrmzmPYE
Profiling for SAP - Compliance Management, Access Control and Segregation of ...TransWare AG
Complex ERP systems are potentially susceptible to segregation of duties (SoD) issues. By means of Profiling for SAP®, the desired responsibilities of SAP® users can be counterchecked against the real usage of SAP®
This webinar covers:
- An overview of the regulatory landscape and territorial scope
- Principles of the EU GDPR
- Breach notification rules
- Data subject rights
- Changes to consent
- Processor liabilities
- Role of the Data Protection Officer
A recording of this webinar is available here: https://www.youtube.com/watch?v=bEvXj2nhPd0
Presentation by Smart ERP Solutions on Smart SoD, an add-on software solution providing effective Segregation of Duties for PeopleSoft applications. For webinar playback see also http://www.smarterp.com/media/Webinar-SoD.html
Strengthening current personal data protection regulation (EU 95/46), GDPR lays down rules relating to protection of natural persons with regard to processing and free movement of personal data. It applies to all entities in EU member states processing personal data by automated means and processing which form part of a filing system. Application of GDPR will be supervised in Belgium by the privacy commission.
SureSkills GDPR - Discover the Smart Solution Google
In today’s digital business, information is currency. But is your data really protected and delivering value? How can you gain competitive advantage, while ensuring you stay compliant with the onerous upcoming EU General Data Protection Regulation?
The whole point of a good GUI (Graphical User Interface) is being able to understand what is going on without reading every single detail. That is why we prefer big red crosses to say "Don't do that you oaf!" instead of a line of text that says "I think you may want to reconsider your options."
Getting Unstuck: Working with Legacy Code and DataCory Foy
From this presentation for the IASA in 2007, Cory covers common challenges in dealing with Legacy Code and Data, and some tools and techniques for handling them.
This webinar delivers an overview of:
- The GDPR and what it means for Cloud service providers
- The technical and organisational measures applicable to Cloud service providers
- The policies and procedures required by the GDPR
- The 'privacy by design' and 'privacy by default' requirements
- The rights of data subjects
- Breach notification obligations
- The impact of subcontracting on Cloud service providers
- ISO 27018 and implementing security controls for personally identifiable information in the Cloud.
A recording of this webinar is available here:
https://www.youtube.com/watch?v=8i7adBubDzw
Revising policies and procedures under the new EU GDPRIT Governance Ltd
This webinar covers:
- An overview of the regulatory landscape
- Territorial scope
- Remedies, liabilities and penalties
- Principles of the EU GDPR
- Policies - GDPR reference
- What if we don't have policies in place?
- What policies are required?
- How to develop a policy?
A recording of this webinar is available here:
https://www.youtube.com/watch?v=tzsXsf1058Q&feature=youtu.be
This webinar gives an overview of:
- The regulation landscape
- Territorial scope
- Remedies, liabilities and penalties
- Privacy notices
- The right of data subject
- Consent
- Data processing
- Profiling or "automated individual decision-making"
- International marketing and data transfers
A recording of this webinar is available here:
https://www.youtube.com/watch?v=Vr_CT24v2iI
Rethinking Segregation of Duties: Where Is Your Business Most Exposed?SAPinsider Events
View this session from GRC 2015 in Las Vegas. Coming to Europe! www.GRC2015.com
Rethinking Segregation of Duties: Where Is Your Business Most Exposed? by Erin Hughes, SAP
Changes in technology and/or the structure of an organization can quickly cause segregation of duties (SoD) policies to become obsolete and dated, yet many companies fail to periodically reassess them as identifying where poor segregation of duties exist continues to be challenging. During this session, gain:
- Practical advice for staying on top of your current policies and segregation of duties rule set
- A clear understanding of the cost and impact of access control violations
- Tips to govern access across your entire landscape and understand financial exposure due to SoD violations using SAP Access Control and SAP Access Violation Management by Greenlight
- Guidance on how to centralize monitoring, investigation tracking, and resolution of access violations
CyNation: 7 Things You Should Know about EU GDPRIryna Chekanava
An overview of EU GDPR key characteristics, its origins and legal implications of non-compliance. It also provides the initial steps that an organisation needs to follow to operate in compliance with new cyber security regulatory landscape.
To become compliant with upcoming GDPR, organisations cannot rely solely on rules, these will protect against the known threats, while Machine Learning protects from the unknown.
DevOps vs GDPR: How to Comply and Stay AgileBen Saunders
A joint webinar between Contino and Delphix explaining how DevOps, Cloud and Data Virtualization can be used to accelerate application delivery, yet still allow organisations to remain GDPR compliant.
What is GDPR and why does it matter to me? Desynit
An introduction to the most radical changes to data protection in the last 10 years. Stephan Chandler-Garcia from Digital Catapult gives you an overview of the General Data Protection Regulation and how you can stay ahead of the curve as a Salesforce user. We will be looking at new ways of thinking about your customers data and new ways of managing consent.
This webinar covers:
- An overview of the regulatory landscape
- Territorial scope
- Remedies, liabilities and penalties
- Security of personal data
- Data protection officer
View the webinar here: https://www.youtube.com/watch?v=u285y9hhgOo
This webinar provides an overview of:
- The regulatory landscape
- Territorial scope
- Remedies, liabilities and penalties
- Risk management and the GDPR
- Legal requirement for a DPIA
- Why and how to conduct a data flow mapping exercise
- What are the challenges?
- What is an information flow?
- The questions to ask
- Data flow mapping techniques.
A recording of this webinar is available here:
https://youtu.be/EZFgrmzmPYE
Profiling for SAP - Compliance Management, Access Control and Segregation of ...TransWare AG
Complex ERP systems are potentially susceptible to segregation of duties (SoD) issues. By means of Profiling for SAP®, the desired responsibilities of SAP® users can be counterchecked against the real usage of SAP®
This webinar covers:
- An overview of the regulatory landscape and territorial scope
- Principles of the EU GDPR
- Breach notification rules
- Data subject rights
- Changes to consent
- Processor liabilities
- Role of the Data Protection Officer
A recording of this webinar is available here: https://www.youtube.com/watch?v=bEvXj2nhPd0
Presentation by Smart ERP Solutions on Smart SoD, an add-on software solution providing effective Segregation of Duties for PeopleSoft applications. For webinar playback see also http://www.smarterp.com/media/Webinar-SoD.html
Strengthening current personal data protection regulation (EU 95/46), GDPR lays down rules relating to protection of natural persons with regard to processing and free movement of personal data. It applies to all entities in EU member states processing personal data by automated means and processing which form part of a filing system. Application of GDPR will be supervised in Belgium by the privacy commission.
SureSkills GDPR - Discover the Smart Solution Google
In today’s digital business, information is currency. But is your data really protected and delivering value? How can you gain competitive advantage, while ensuring you stay compliant with the onerous upcoming EU General Data Protection Regulation?
The whole point of a good GUI (Graphical User Interface) is being able to understand what is going on without reading every single detail. That is why we prefer big red crosses to say "Don't do that you oaf!" instead of a line of text that says "I think you may want to reconsider your options."
Getting Unstuck: Working with Legacy Code and DataCory Foy
From this presentation for the IASA in 2007, Cory covers common challenges in dealing with Legacy Code and Data, and some tools and techniques for handling them.
No more Three Tier - A path to a better code for Cloud and AzureMarco Parenzan
Three Tier is no more a model for Cloud and in general Scalable Web Applications. Scaffolding from SQL Database is, sure, the worst way to do. A road to do this is changing modeling activity, from scaffolded DB model to Command/DTO model, through ViewModel pattern. Command and DTOs are pillars of CQRS model.
Presentation from AIIM Greater Los Angeles Chapter Meeting on Feb 24th. Pilar C. McAdam, CRM, ERMm
Director of Business Intake and Records
Sheppard Mullin Richter & Hampton LLP
Jim Higdon
Senior Director of Information and Strategy
Vendor Direct Solutions
Look Beyond Data Trends - A Technique to Find Hidden Design Implications from...UXPA International
Contextual inquiry as a research method has gained its popularity these years among user experience practitioners. As a user researcher, we face excessive user data that are collected from field studies. Most of us review and analyze the field data by looking for trends of users’ responses and behaviors. For example, “Affinity diagram” has been commonly used to group and analyze the field data to identify any trends. However, in many cases, it is not enough to draw our conclusions based on a few “Aha!” moments. We should also consider the rich and “random” data that are not obvious to form trends, and abstract hidden implications from them. How we could accomplish it, however, has remained as a challenge.
In this presentation, I will start with a case study from our own work, and demonstrate how we found the hidden implications from our data. Then we will explore and discuss strategies and techniques from different perspectives.
This is a talk I gave on patterns and antipatterns of SOA, based on my understandings and practices and inspired by Ron Jacobs famous webcast by the same name.
SolidWorks World Presentation from Paul Gimbel at Razorleaf. This presentation deals with the use of Microsoft Excel and Visual Basic for Applications as a front end to driving SolidWorks geometry in a design automation implementation.
Interface design is not something that belongs solely in the world of Apple. Your website and applications can all benefit greatly from an understanding of how your users might navigate your product.
Presented At the Sydney NETUG on August 18th by Adam Cogan
We understand that complex enterprise organizations, for many reasons, are currently managing multiple orgs. With this, often comes a number of questions about how to best manage a multi-org environment.
5 things cucumber is bad at by Richard LawrenceSkills Matter
This talk will look at 5 things Cucumber’s bad at, why that’s a good thing, and what it tells us about Cucumber’s sweet spot in a team’s toolkit.
Many times, when people complain about something Cucumber’s not good at, they’re unwittingly describing something Cucumber shouldn't be good at. They’re revealing that they don’t quite understand BDD and Cucumber’s role in it.
Cucumber is the world's most misunderstood collaboration tool and people need to hear this over and over again.
Patterns for slick database applicationsSkills Matter
Slick is Typesafe's open source database access library for Scala. It features a collection-style API, compact syntax, type-safe, compositional queries and explicit execution control. Community feedback helped us to identify common problems developers are facing when writing Slick applications. This talk suggests particular solutions to these problems. We will be looking at reducing boiler-plate, re-using code between queries, efficiently modeling object references and more.
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
Metascala is a tiny metacircular Java Virtual Machine (JVM) written in the Scala programming language. Metascala is barely 3000 lines of Scala, and is complete enough that it is able to interpret itself metacircularly. Being written in Scala and compiled to Java bytecode, the Metascala JVM requires a host JVM in order to run.
The goal of Metascala is to create a platform to experiment with the JVM: a 3000 line JVM written in Scala is probably much more approachable than the 1,000,000 lines of C/C++ which make up HotSpot, the standard implementation, and more amenable to implementing fun features like continuations, isolates or value classes. The 3000 lines of code gives you:
The bytecode interpreter, together with all the run-time data structures
A stack-machine to SSA register-machine bytecode translator
A custom heap, complete with a stop-the-world, copying garbage collector
Implementations of parts of the JVM's native interface
Although it is far from a complete implementation, Metascala already provides the ability to run untrusted bytecode securely (albeit slowly), since every operation which could potentially cause harm (including memory allocations and CPU usage) is virtualized and can be controlled. Ongoing work includes tightening of the security guarantees, improving compatibility and increasing performance.
ENJOYIN
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
Code Quotations: Code-as-Data for F#
This tutorial will cover F# Code Quotations in-depth. You'll learn what Code Quotations are, how to use them, and where to apply them in your applications. We'll work through several real-world examples to highlight the important features -- and potential pitfalls -- of Code Quotations.
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
Elixir, Erlang, and Cucumberl
Elixir is a new Ruby-inspired programming language that uses the powerful concurrent machinery of Erlang behind the scenes. Cucumberl is a port of Cucumber to Erlang. Let's see what happens when we put them together.
In this talk, we'll discuss:
How Erlang's concurrency makes it easier to write robust programs
Elixir's approachable syntax
How to test Erlang and Elixir programs using Cucumberl
Attendees will walk away with a solid introduction to the principles of Erlang, and an appreciation of the way Elixir brings the joy of Ruby to the solidity of the Erlang runtime.
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
Cukeup NYC. Peter Bell on Getting started with cucumber.js
Ever wished you could use cucumber in your javascript apps? In this talk we'll look at the current state of play of cucumber js, when you should and shouldn't use it, and how to get started writing your step definitions in javascript.
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
In this engaging experience report, we will present 3 different views – Developer, Tester, Business Analyst – of implementing Acceptance Test Driven Development in a complex, data-driven domain. Hear how we used ATDD for building a ubiquitous language across the entire team, promoting faster feedback, and cultivating a culture where product owners were deeply invested in the quality of both every deliverable and the system as a whole.
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
In this tutorial, Phil and Rachel will introduce you to the Try F# samples giving you exposure to, and an understanding of, how F# tackles some real-world scenarios. We'll help you explore, generate, and just play around with code samples, as well as talk you through some of the key principles of F#. By the end of this session, you'll have gone from zero to data science in only a few hours!
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
F# is a powerful open-source language which Microsoft, other companies and the F# community all contribute to. In this talk, Don will discuss how the “F# space” has recently opened up significantly in interesting ways. F# now includes contributions that range from Cloud IDE platforms, Cloud Compute frameworks, Data interoperability components, Cross-platform execution, Try F#, MonoDevelop, and even Emacs editor integration with surprising tooling support, as well as the Visual F# tools from Microsoft and the broader NuGet package ecosystem. Don will also talk about some of the latest contributions from Microsoft Research, including new type provider components for F#, and describe how his team work with the Visual F# team and other teams around Microsoft. There will also be demos of some fun new stuff that’s been going on with F# at MSR and the community.
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
Would you like to learn how to make your software testing practices more effective? And how to use your testing strategy to better capture and reflect customer requirements? Gojko Adzic takes a critical look at the effectiveness of current software testing practices and proposes strategies to make it much more effective.
Dmitry mozorov on code quotations code as-data for f#Skills Matter
Code Quotations: Code-as-Data for F#
This tutorial will cover F# Code Quotations in-depth. You'll learn what Code Quotations are, how to use them, and where to apply them in your applications. We'll work through several real-world examples to highlight the important features -- and potential pitfalls -- of Code Quotations.
Simon Peyton Jones: Managing parallelismSkills Matter
If you want to program a parallel computer, it obviously makes sense to start with a computational paradigm in which parallelism is the default (ie functional programming), rather than one in which computation is based on sequential flow of control (the imperative paradigm). And yet, and yet ... functional programmers have been singing this tune since the 1980s, but do not yet rule the world. In this talk I’ll say why I think parallelism is too complex a beast to be slain at one blow, and how we are going to be driven, willy-nilly, towards a world in which side effects are much more tightly controlled than now. I’ll sketch a whole range of ways of writing parallel program in a functional paradigm (implicit parallelism, transactional memory, data parallelism, DSLs for GPUs, distributed processes, etc, etc), illustrating with examples from the rapidly moving Haskell community, and identifying some of the challenges we need to tackle.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
18. Why transform between tiers? Cache UI WS DB Map from DTOs & WS to view model Map from DTOs and WS to domain object Use EF to map from tables to domain objects
21. Why not be upfront about it? List of customers Data correct as of 10 minutes ago
22. Only data, no behavior There is no object So why use an Object/Relational Mapper?
23. Keep it simple - 2-Tier 2 Layers == 2 Tiers UI Query only Persistent View Model For each view in the UI, have a view/table in the DB SELECT * FROM MyTable (WHERE ID = @ID)
24. Search First think about what the user wants to find Design some custom screens for that Eg. Amazon recommendations Separate UI talking to different data store SQL Server Full Text Search Lucene.net
25. No relations between views / tables No coupling between screens in the UI No foreign keys between tables in the persistent view model
26. Data duplication in views & tables The same information can be shown on different screens in the UI The same information can be stored in different tables in the persistent view model Tables contain a column for every piece of information shown in the UI Avoid calculations when doing queries Have the data calculated ahead of time
27. Deployment and Security Deploy the persistent view model DB to the web tier (only SELECT is permitted) Don’t have to go through the firewall – faster Role-based security Different screens for different roles go to different tables – SELECT permissions per role Just as secure as in-memory caches If not more so
28. Use for preliminary validation Before going to submit data, check if it already exists in the persistent view model Uniqueness Can expose to user (Yahoo user signup) Related Entity Existence Address validation – existence of street name Results in less commands being rejected
31. Validation and Business Rules Validation: Is the input potentially good? Structured correctly? Ranges, lengths, etc Rules: Should we do this? Based on the current system state What the user saw is irrelevant
38. Capturing user intent Why is it important? Differentiating between: Correcting a mistyped shipping address The user moved – reroute shipments underway Sometimes users accidentally modify fields when tabbing between columns
41. Not capturing user intent In a traditional UI – what we have is the checkbox Why do users select multiple seats? Because they’re reserving for a family / friends But then, concurrency happens Somebody else got in first on one of the seats Try to find a block of seats somewhere else
42. Capturing user intent Group reservation: Small group – sitting together Large group – several small groups Enter number of people Enter preferred seat type – indicates cost System emails back when reservation can be filled Include waiting list functionality
46. What’s a good command? The kind you can reply with: “Thank you. Your confirmation email will arrive shortly” Inherently asynchronous Not really related to an entity
47. Eg. Posting a comment to a blog After the browser submits the comment, immediately shows it on the page using AJAX Why wait for a response from the server? It’s not like the user’s going to call their friends and say “hey, look at the comment I just posted” And even if they did, by then it probably would have already been processed by the server
48. Eg. Withdrawing cash from an ATM Before the ATM sends the command: Using the account information retrieved Account type, Max single withdrawal, Max daily withdrawal Decides to send the command (or not) If so, dispenses cash without waiting for a response Yes – really. Exposed to race conditions Cheaper for the bank to let them through And you pay ruinous interest in those cases
49. Queries not only for views Used to decide if commands should be sent Yes – this is business logic. Get over it Client-side controllers are supposed to do logic May require additional data
51. What aren’t they for? Validation Commands are validated before the domain model is called Queries Entity relationships for reading are unnecessary
52. What are they for? In addition to doing what the command said, doing other things as well Eg. When a new order is submitted, if the customer has ordered more than X in the past, give them a discount
53. Only persist what they need The domain model isn’t responsible for persisting all data only what it needs for its purposes The rest of the world is using the data in the query store anyway
55. For better scalability, add pub/sub Data from input immediately overlaid on queries Queries View Model UI Queries Commands Publish WS Input Validation Validation Rules Cache Updater DB
57. Summary Keep queries simple – 2-Tier if possible No data transfer objects Have commands reflect user intent Adjust UI design to capture intent Get the benefits of asynchronous programming Simple validation, focused business rules
58. Thank you Udi Dahan – The Software Simplist Enterprise Development Expert & SOA Specialist www.UdiDahan.com email@UdiDahan.com
Editor's Notes
The goal being to get the data from the paper to the machine as quickly as possible.And the important thing about data entry is that the printed page is …
If there was any conflict between the computer and the printed page – the printed page won.
You’d think that something as significant as a change to the source of truth would influence software architecture in some way
This is a fact of life – like gravity – you can’t fight it.
If the result is that users are going to be seeing stale data anyway – why go all the way to the database?And if we’re going to be putting a cache in there anyway – we’re practically ensuring staleness, we just don’t tell anybody, right?
That’s a lot of transformation!
Maintainability? With all of this possibly redundant mapping code?It couldn’t be performance, because all of these transformations are taking up extra cycles.
We see this on Twitter and Facebook – telling us how long ago something happened
They’re tightly coupled anyway – sticking a bunch of layers in between won’t change that.This can be as simple as statically defined views on top of your tables.
Reminding ourselves that users are looking at stale data…
Sometimes developers mix up these two, but they’re different – first we validate the command, AFTER that, we perform rules, AFTER that we store/update data.
But what kind of rules will we need? The kind that answer the following question…
But, if we’ve already validated their input, is there any reason why we shouldn’t do what they want?
These kinds of screens are often described as CRUD – for create, read, update, and delete in the developer lingoAlso known in the user lingo as CRAP. Though, you’ve got to admit, it’s got a certain …
Matrix feel to it. The thing is, other than straight data manipulation, those screens don’t let us capture WHY the user is changing the data or what they’re trying to achieve.
The user who can correct a mistyped shipping address may not be permitted to change the user’s address.By automatically shoving all data into the same grid without thinking through these rules, we make it harder on ourselves to later implement these rules.For example…
I’m using this image because it’s small enough to understand what’s going on – to see the detail of what’s available, reserved, confirmed, etc.Now imagine larger scales…
Each one of the slots here is a block of seats – not just one.
This way, reads and writes don’t interfere with each other in the DB