The document discusses various service architecture patterns for designing microservices. It covers concepts like service responsibilities, data ownership-driven services, shared data services, service contracts, and decoupling domain entities from contracts. Some key points discussed are:
- Services should have well-defined responsibilities and own the data for their domain.
- Data ownership allows independent deployment but can result in performance issues due to many calls between services.
- Shared data services improve performance but reduce independence and blur domain boundaries.
- Service contracts should be designed for external use rather than as an implementation detail, and should loosely couple with domain models.
- Domain models can be shared between services but contracts need to encapsulate domain entities to control serialized data.
This document discusses domain-driven design (DDD) as an approach to tackling complexity in software development. DDD focuses on mapping business domain concepts directly into code in order to create software that reflects the business domain rather than frameworks. This is achieved through building a domain model using techniques such as defining entities, value objects, aggregates, repositories, factories and services to encapsulate business logic within the domain layer. Context mapping is also discussed as a way to delineate different bounded contexts and model variations between them.
Elliptic curve cryptography (ECC) is an approach to public-key cryptography that uses elliptic curves over finite fields. It provides the same level of security as other cryptosystems but with smaller key sizes. ECC is used for encryption, digital signatures, and other tasks. It is based on the algebraic structure of elliptic curves and points on those curves forming an Abelian group. The U.S. has endorsed ECC algorithms for key exchange and digital signatures.
The document discusses various "power tools" that can be used to build adaptive and maintainable software solutions, including regular expressions, reflection, and code generation. It provides an overview of each technique and demonstrates how to use reflection to simplify parsing fixed-length record files with different formats in a way that is less complex and brittle than hard-coding the logic. Reflection allows identifying the correct record object type at runtime based on the record prefix rather than requiring separate parsing code for each type. The sample also shows using code generation and reflection to dynamically create and document the record object classes.
This document describes a mobile authentication and key exchange protocol that uses nested one-time secrets. It contains modules for the user, VLR verification, HLR verification, key generation, and nested one-time secrets. The protocol uses lightweight public key cryptography and a challenge-response technique in two stages: an initial procedure and real execution stage. This allows for fast mutual authentication and agreement of a nested one-time secret while providing greater security and lower computational complexity than other wireless authentication schemes.
Domain-driven design is a set of principles and patterns for focusing design effort on the core domain of an application. It involves creating a model that reflects the key domain concepts and then using that model throughout the software design and implementation. This includes using a ubiquitous language shared between technical and domain experts, elaborating the model through collaborative discussion, and representing the model through diagrams, specifications, tests and code.
Java Svet - Communication Between Android App ComponentsAleksandar Ilić
Presentation about how to build flexible (using fragments), smooth (using async tasks and intent services) and "data up to date" (using loaders) Android applications.
This document provides an overview of WCF RIA Services, which is a framework that allows for exposing and consuming domain-specific queries and operations from a Silverlight client application. It discusses the domain query rules, the generated domain context and service classes, asynchronous loading of data, caching query results, retrieving object hierarchies, and taking a look behind the scenes at the infrastructure. The key aspects covered are exposing and consuming domain queries from the client, asynchronous data access, caching queries on the client, and retrieving related objects to shape the data for the client application.
This document discusses strategies for implementing continuous integration (CI) at scale. It describes the challenges of long build times when integrating code from many committers across a large codebase. Various CI strategies are evaluated, including multiple single jobs builds, pipelined builds, staged team commits, parallel jobs builds, and using a commit gate to check build status before committing code. The best approach depends on factors like code modularity, testability, and team distribution. Continuous integration, testing, and deployment are important, but one must consider build time, resource usage, and understandability of the system.
This document discusses domain-driven design (DDD) as an approach to tackling complexity in software development. DDD focuses on mapping business domain concepts directly into code in order to create software that reflects the business domain rather than frameworks. This is achieved through building a domain model using techniques such as defining entities, value objects, aggregates, repositories, factories and services to encapsulate business logic within the domain layer. Context mapping is also discussed as a way to delineate different bounded contexts and model variations between them.
Elliptic curve cryptography (ECC) is an approach to public-key cryptography that uses elliptic curves over finite fields. It provides the same level of security as other cryptosystems but with smaller key sizes. ECC is used for encryption, digital signatures, and other tasks. It is based on the algebraic structure of elliptic curves and points on those curves forming an Abelian group. The U.S. has endorsed ECC algorithms for key exchange and digital signatures.
The document discusses various "power tools" that can be used to build adaptive and maintainable software solutions, including regular expressions, reflection, and code generation. It provides an overview of each technique and demonstrates how to use reflection to simplify parsing fixed-length record files with different formats in a way that is less complex and brittle than hard-coding the logic. Reflection allows identifying the correct record object type at runtime based on the record prefix rather than requiring separate parsing code for each type. The sample also shows using code generation and reflection to dynamically create and document the record object classes.
This document describes a mobile authentication and key exchange protocol that uses nested one-time secrets. It contains modules for the user, VLR verification, HLR verification, key generation, and nested one-time secrets. The protocol uses lightweight public key cryptography and a challenge-response technique in two stages: an initial procedure and real execution stage. This allows for fast mutual authentication and agreement of a nested one-time secret while providing greater security and lower computational complexity than other wireless authentication schemes.
Domain-driven design is a set of principles and patterns for focusing design effort on the core domain of an application. It involves creating a model that reflects the key domain concepts and then using that model throughout the software design and implementation. This includes using a ubiquitous language shared between technical and domain experts, elaborating the model through collaborative discussion, and representing the model through diagrams, specifications, tests and code.
Java Svet - Communication Between Android App ComponentsAleksandar Ilić
Presentation about how to build flexible (using fragments), smooth (using async tasks and intent services) and "data up to date" (using loaders) Android applications.
This document provides an overview of WCF RIA Services, which is a framework that allows for exposing and consuming domain-specific queries and operations from a Silverlight client application. It discusses the domain query rules, the generated domain context and service classes, asynchronous loading of data, caching query results, retrieving object hierarchies, and taking a look behind the scenes at the infrastructure. The key aspects covered are exposing and consuming domain queries from the client, asynchronous data access, caching queries on the client, and retrieving related objects to shape the data for the client application.
This document discusses strategies for implementing continuous integration (CI) at scale. It describes the challenges of long build times when integrating code from many committers across a large codebase. Various CI strategies are evaluated, including multiple single jobs builds, pipelined builds, staged team commits, parallel jobs builds, and using a commit gate to check build status before committing code. The best approach depends on factors like code modularity, testability, and team distribution. Continuous integration, testing, and deployment are important, but one must consider build time, resource usage, and understandability of the system.
The document discusses perspectives from a journeyman on agile development practices and the role of architects. It notes that agile changed attitudes towards upfront design and emphasizes continuous design and refactoring. It also stresses that experience and craftsmanship are both needed. The role of an architect is described as a technical coach who helps with delivery while also maintaining a broader view of architecture, technical debt, and documentation.
The document provides examples of code snippets and design principles for building banking applications. Some key points discussed include:
- Encapsulating state checks and validation logic rather than exposing primitive checks.
- Avoiding mutable collections and exposing only immutable views of data.
- Modeling domain-specific concepts like transactions, accounts, customers rather than using language primitives.
- Implementing single responsibility and telling objects what to do rather than how to do through dependency injection.
The examples demonstrate applying object-oriented design principles like encapsulation, single responsibility and dependency injection to model complex domain concepts in banking applications.
The document discusses strategies for managing one's limited time more effectively. It recommends simplifying possessions, being selective about what information and sources one engages with, focusing on one task at a time instead of multitasking, prioritizing quality of activities over quantity, finishing projects instead of starting many, engaging the conscious mind during passive activities, and seeking flow states of deep engagement in work or leisure. The overall message is about balancing various interests and commitments in a sustainable way.
The development team is working on a project that has fallen behind schedule. After 10 months, they have only completed the first release instead of the planned three releases. The customer is nervous about delays and the team is accumulating technical debt. The team acknowledges mistakes were made in analysis and estimation. They discuss the need to focus on building the right product instead of just completing tasks, and ensuring development aligns with the customer's needs through improved communication and presence onsite.
This document discusses principles of developing software using small methods, classes, modules, applications, and teams. Some key points made include:
- Small methods, classes, and modules make the software simpler to understand and easier to change.
- Applications should be carved out based on domain, users, workflows, and loose coupling. This provides better deployment, users, and asynchronous processes.
- Teams work best when organized by application rather than module to avoid issues when code needs to span applications.
- Conway's law states that the structure of software reflects the structure of the organization that built it, so architecture and team organization should be considered together.
Bahmni is an open source hospital management system designed for low resource environments. It allows for patient care both inpatient and outpatient, as well as emergency, operation, intensive care, pharmacy and other functions. It also handles administration tasks like billing, inventory, procurement and HR/accounting. Key components include OpenMRS for medical records, OpenERP for administration, and OpenELIS for the laboratory information system. The system is designed to work offline on tablets and computers, with responsive interfaces and AtomFeed integration between components.
Bahmni started from a rural hospital in India three years back and is now being deployed in many countries. In this talk I share our motivation, approach and strategy of making and scaling Bahmni via implementations. I will also cover key technologies, features and roadmap of Bahmni.
This document provides an annual report for EIT Digital for 2015. It summarizes the organization's activities and achievements over the past year. Some key points:
- EIT Digital strengthened its vision for driving Europe's digital transformation through clear strategy and communication. It grew its network of partners and locations.
- Education programs expanded, with over 100 Master's graduates, 300 new Master's students, and further development of online and professional offerings. Innovation activities increased impact with numerous new products, services, and startups.
- Looking ahead, EIT Digital aims to enhance its governance, increase impact through focus, and develop sustainable income sources to realize its mission of digital transformation. The organization was recognized through the renewal of
Structured Approach to Solution ArchitectureAlan McSweeney
The role of solution architecture is to identify answer to a business problem and set of solution options and their components. There will be many potential solutions to a problem with varying degrees of suitability to the underlying business need. Solution options are derived from a combination of Solution Architecture Dimensions/Views which describe characteristics, features, qualities, requirements and Solution Design Factors, Limitations And Boundaries which delineate limitations. Use of structured approach can assist with solution design to create consistency. The TOGAF approach to enterprise architecture can be adapted to perform some of the analysis and design for elements of Solution Architecture Dimensions/Views.
introduction to Windows Comunication Foundationredaxe12
The document discusses Windows Communication Foundation (WCF) and provides an overview of its key capabilities. WCF unifies distributed application development on Windows, allows interoperability with other platforms, and maximizes developer productivity. It brings together existing Microsoft distributed technologies and supports WS-* web services standards.
Domain Driven Design (DDD) is a topic that's been gaining a lot of popularity in both the Java and .NET camps recently. Entities, value types, repositories, bounded contexts and anti-corruption layers -- find out what all the buzz is about, and how establishing a domain model can help you combat complexity in your code.
Richard Dingwall is a .NET developer and blogger with a passion for architecture and maintainable code.
He is currently working at Provoke Solutions as lead developer on a six-month project introducing test-driven development (TDD) and domain-driven design (DDD) to a large ASP.NET ERP system.
An hour-long talk given at Wellington .NET user group, Sept 23 2009.
SeedStack business framework aims to make implementing DDD easier by providing a set of ready-to-use tactical building blocks along with common tasks automation and helpers.
These slides have been shown at the Zenika DDD NightClazz, the 19th of May 2016, in Paris.
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05CHOOSE
This document summarizes the key features and benefits of LINQ (Language Integrated Query) in .NET. LINQ provides a unified model for querying different types of data like objects, SQL databases, and XML. It allows writing queries directly in C# and VB code as opposed to separate querying APIs. This improves type safety, refactoring support, and reduces errors. The document provides examples of querying different data sources with and without LINQ to demonstrate the improvements.
Event sourcing is a pattern for modelling your application’s business logic. It states that all changes to application state should be defined and stored as a sequence of events. The idea of recording events for information storage is nothing new. It has been used for decades in finance, healthcare, and other fields. A few years ago it was rediscovered in software design and its advantages are many: - Suitable for building scalable, highly concurrent, distributed systems. - The stored events give you the true history of a system. This audit is required by law in some industries. - The system’s state can be reversed to any point in the past for retroactive debugging and data analysis. - Gives freedom to refactor your business logic, thus allows much better response to new requirements. - The required infrastructure is simple - no monstrous databases are involved. The focus of my talk will be the Event Sourcing pattern, but I’ll also briefly describe CQRS - an architecture that goes hand in hand with Event Sourcing.
The document provides an overview of 6 .NET projects focused on building various components of a library management system. Project 1 involves building parts of the business tier for a retail company. Project 2 involves developing a Windows Forms user interface for a library database. Project 3 converts the data access tier to use LINQ and modifies the business tier. Project 4 converts the user interface to a web application. Project 5 implements WCF web services for the library application. Project 6 is for a test management application. Detailed requirements and code snippets are provided for each project.
The document discusses the LINQ (Language Integrated Query) project in .NET, which allows querying of objects, relational data, and XML in a unified manner. LINQ introduces standard query operators and language features in C# 3.0 and VB 9.0 that enable querying of any .NET collection. It also discusses DLinq for querying relational databases and mapping results to objects, and XLinq for querying XML in a functional, element-centric manner.
Introduction to Event Sourcing and CQRS (IASA-IL)Vladik Khononov
Slides for my "Introduction to Event Sourcing and CQRS" session at the IASA-IL meeting.
Abstract:
Event sourcing is a pattern for modeling the application’s business logic. It states that all changes to application state should be defined and stored as a sequence of events.
Its advantages are many:
* Gives freedom to refactor the business logic, allowing better response to new requirements.
* Suitable for building scalable, highly concurrent, distributed systems.
* Stored events give the true history of a system, which is required by law in some industries.
* The system’s state can be reversed to any point in the past for retroactive debugging.
* The required infrastructure is simple - no monstrous databases are involved.
Vladik will also describe CQRS, an architecture that goes hand in hand with Event Sourcing.
This document discusses LINQ to SharePoint and sandboxed solutions. It begins with an introduction to the presenter and agenda. It then covers some of the limitations of using CAML queries and SQL queries directly in SharePoint. It introduces LINQ as a simpler way to query data and discusses how LINQ to SQL works. It also demonstrates some C# language features like lambda expressions, query syntax, and anonymous types that enable LINQ. Finally, it concludes with a promise to demonstrate LINQ queries in a later portion of the session.
The document discusses different architectural patterns for structuring business logic, including transaction script, active record, domain model, and event sourced domain model. It also covers related topics like layered architecture, testing strategies, programming languages, and choosing the right pattern based on factors like complexity of business logic and data structures. The goal is to select a pattern that best matches the needs of the specific business domain and application.
Soa Symposium Expressing Service Capabilities Uniformly 2009 10 14 BcfuzzyBSc
The document discusses using a uniform contract to increase integration maturity in service-oriented architectures (SOAs). It proposes expressing service capabilities through resources to create a more abstract interface. The key steps to transform an existing service contract to a uniform contract are outlined, which include splitting nouns from verbs, identifying entity identifiers, and reusing uniform contract elements. Examples of transforming common service operations, like getting prices or making payments, into resource-based interfaces are provided. The benefits of a resource-based approach include enabling runtime discovery and flexible orchestration of services.
The document describes how an in-memory data grid (IMDG) like GigaSpaces XAP can be used to power a payment authorization process. Key elements include:
1) Payment objects are written to the IMDG and indexed for fast retrieval and routing.
2) Validation tasks read payment data from the IMDG in parallel to check the user and vendor.
3) A payment authorization object in the IMDG is updated based on the validation results to track overall status.
When validation is complete, the payment authorization status can be reviewed to approve or reject the payment request.
Gabriele Pividori presents to us the importance of communication within Domain-Driven Design, how the Ubiquitous Language can aid our software designs and the value the Aggregate pattern can bring.
The document discusses perspectives from a journeyman on agile development practices and the role of architects. It notes that agile changed attitudes towards upfront design and emphasizes continuous design and refactoring. It also stresses that experience and craftsmanship are both needed. The role of an architect is described as a technical coach who helps with delivery while also maintaining a broader view of architecture, technical debt, and documentation.
The document provides examples of code snippets and design principles for building banking applications. Some key points discussed include:
- Encapsulating state checks and validation logic rather than exposing primitive checks.
- Avoiding mutable collections and exposing only immutable views of data.
- Modeling domain-specific concepts like transactions, accounts, customers rather than using language primitives.
- Implementing single responsibility and telling objects what to do rather than how to do through dependency injection.
The examples demonstrate applying object-oriented design principles like encapsulation, single responsibility and dependency injection to model complex domain concepts in banking applications.
The document discusses strategies for managing one's limited time more effectively. It recommends simplifying possessions, being selective about what information and sources one engages with, focusing on one task at a time instead of multitasking, prioritizing quality of activities over quantity, finishing projects instead of starting many, engaging the conscious mind during passive activities, and seeking flow states of deep engagement in work or leisure. The overall message is about balancing various interests and commitments in a sustainable way.
The development team is working on a project that has fallen behind schedule. After 10 months, they have only completed the first release instead of the planned three releases. The customer is nervous about delays and the team is accumulating technical debt. The team acknowledges mistakes were made in analysis and estimation. They discuss the need to focus on building the right product instead of just completing tasks, and ensuring development aligns with the customer's needs through improved communication and presence onsite.
This document discusses principles of developing software using small methods, classes, modules, applications, and teams. Some key points made include:
- Small methods, classes, and modules make the software simpler to understand and easier to change.
- Applications should be carved out based on domain, users, workflows, and loose coupling. This provides better deployment, users, and asynchronous processes.
- Teams work best when organized by application rather than module to avoid issues when code needs to span applications.
- Conway's law states that the structure of software reflects the structure of the organization that built it, so architecture and team organization should be considered together.
Bahmni is an open source hospital management system designed for low resource environments. It allows for patient care both inpatient and outpatient, as well as emergency, operation, intensive care, pharmacy and other functions. It also handles administration tasks like billing, inventory, procurement and HR/accounting. Key components include OpenMRS for medical records, OpenERP for administration, and OpenELIS for the laboratory information system. The system is designed to work offline on tablets and computers, with responsive interfaces and AtomFeed integration between components.
Bahmni started from a rural hospital in India three years back and is now being deployed in many countries. In this talk I share our motivation, approach and strategy of making and scaling Bahmni via implementations. I will also cover key technologies, features and roadmap of Bahmni.
This document provides an annual report for EIT Digital for 2015. It summarizes the organization's activities and achievements over the past year. Some key points:
- EIT Digital strengthened its vision for driving Europe's digital transformation through clear strategy and communication. It grew its network of partners and locations.
- Education programs expanded, with over 100 Master's graduates, 300 new Master's students, and further development of online and professional offerings. Innovation activities increased impact with numerous new products, services, and startups.
- Looking ahead, EIT Digital aims to enhance its governance, increase impact through focus, and develop sustainable income sources to realize its mission of digital transformation. The organization was recognized through the renewal of
Structured Approach to Solution ArchitectureAlan McSweeney
The role of solution architecture is to identify answer to a business problem and set of solution options and their components. There will be many potential solutions to a problem with varying degrees of suitability to the underlying business need. Solution options are derived from a combination of Solution Architecture Dimensions/Views which describe characteristics, features, qualities, requirements and Solution Design Factors, Limitations And Boundaries which delineate limitations. Use of structured approach can assist with solution design to create consistency. The TOGAF approach to enterprise architecture can be adapted to perform some of the analysis and design for elements of Solution Architecture Dimensions/Views.
introduction to Windows Comunication Foundationredaxe12
The document discusses Windows Communication Foundation (WCF) and provides an overview of its key capabilities. WCF unifies distributed application development on Windows, allows interoperability with other platforms, and maximizes developer productivity. It brings together existing Microsoft distributed technologies and supports WS-* web services standards.
Domain Driven Design (DDD) is a topic that's been gaining a lot of popularity in both the Java and .NET camps recently. Entities, value types, repositories, bounded contexts and anti-corruption layers -- find out what all the buzz is about, and how establishing a domain model can help you combat complexity in your code.
Richard Dingwall is a .NET developer and blogger with a passion for architecture and maintainable code.
He is currently working at Provoke Solutions as lead developer on a six-month project introducing test-driven development (TDD) and domain-driven design (DDD) to a large ASP.NET ERP system.
An hour-long talk given at Wellington .NET user group, Sept 23 2009.
SeedStack business framework aims to make implementing DDD easier by providing a set of ready-to-use tactical building blocks along with common tasks automation and helpers.
These slides have been shown at the Zenika DDD NightClazz, the 19th of May 2016, in Paris.
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05CHOOSE
This document summarizes the key features and benefits of LINQ (Language Integrated Query) in .NET. LINQ provides a unified model for querying different types of data like objects, SQL databases, and XML. It allows writing queries directly in C# and VB code as opposed to separate querying APIs. This improves type safety, refactoring support, and reduces errors. The document provides examples of querying different data sources with and without LINQ to demonstrate the improvements.
Event sourcing is a pattern for modelling your application’s business logic. It states that all changes to application state should be defined and stored as a sequence of events. The idea of recording events for information storage is nothing new. It has been used for decades in finance, healthcare, and other fields. A few years ago it was rediscovered in software design and its advantages are many: - Suitable for building scalable, highly concurrent, distributed systems. - The stored events give you the true history of a system. This audit is required by law in some industries. - The system’s state can be reversed to any point in the past for retroactive debugging and data analysis. - Gives freedom to refactor your business logic, thus allows much better response to new requirements. - The required infrastructure is simple - no monstrous databases are involved. The focus of my talk will be the Event Sourcing pattern, but I’ll also briefly describe CQRS - an architecture that goes hand in hand with Event Sourcing.
The document provides an overview of 6 .NET projects focused on building various components of a library management system. Project 1 involves building parts of the business tier for a retail company. Project 2 involves developing a Windows Forms user interface for a library database. Project 3 converts the data access tier to use LINQ and modifies the business tier. Project 4 converts the user interface to a web application. Project 5 implements WCF web services for the library application. Project 6 is for a test management application. Detailed requirements and code snippets are provided for each project.
The document discusses the LINQ (Language Integrated Query) project in .NET, which allows querying of objects, relational data, and XML in a unified manner. LINQ introduces standard query operators and language features in C# 3.0 and VB 9.0 that enable querying of any .NET collection. It also discusses DLinq for querying relational databases and mapping results to objects, and XLinq for querying XML in a functional, element-centric manner.
Introduction to Event Sourcing and CQRS (IASA-IL)Vladik Khononov
Slides for my "Introduction to Event Sourcing and CQRS" session at the IASA-IL meeting.
Abstract:
Event sourcing is a pattern for modeling the application’s business logic. It states that all changes to application state should be defined and stored as a sequence of events.
Its advantages are many:
* Gives freedom to refactor the business logic, allowing better response to new requirements.
* Suitable for building scalable, highly concurrent, distributed systems.
* Stored events give the true history of a system, which is required by law in some industries.
* The system’s state can be reversed to any point in the past for retroactive debugging.
* The required infrastructure is simple - no monstrous databases are involved.
Vladik will also describe CQRS, an architecture that goes hand in hand with Event Sourcing.
This document discusses LINQ to SharePoint and sandboxed solutions. It begins with an introduction to the presenter and agenda. It then covers some of the limitations of using CAML queries and SQL queries directly in SharePoint. It introduces LINQ as a simpler way to query data and discusses how LINQ to SQL works. It also demonstrates some C# language features like lambda expressions, query syntax, and anonymous types that enable LINQ. Finally, it concludes with a promise to demonstrate LINQ queries in a later portion of the session.
The document discusses different architectural patterns for structuring business logic, including transaction script, active record, domain model, and event sourced domain model. It also covers related topics like layered architecture, testing strategies, programming languages, and choosing the right pattern based on factors like complexity of business logic and data structures. The goal is to select a pattern that best matches the needs of the specific business domain and application.
Soa Symposium Expressing Service Capabilities Uniformly 2009 10 14 BcfuzzyBSc
The document discusses using a uniform contract to increase integration maturity in service-oriented architectures (SOAs). It proposes expressing service capabilities through resources to create a more abstract interface. The key steps to transform an existing service contract to a uniform contract are outlined, which include splitting nouns from verbs, identifying entity identifiers, and reusing uniform contract elements. Examples of transforming common service operations, like getting prices or making payments, into resource-based interfaces are provided. The benefits of a resource-based approach include enabling runtime discovery and flexible orchestration of services.
The document describes how an in-memory data grid (IMDG) like GigaSpaces XAP can be used to power a payment authorization process. Key elements include:
1) Payment objects are written to the IMDG and indexed for fast retrieval and routing.
2) Validation tasks read payment data from the IMDG in parallel to check the user and vendor.
3) A payment authorization object in the IMDG is updated based on the validation results to track overall status.
When validation is complete, the payment authorization status can be reviewed to approve or reject the payment request.
Gabriele Pividori presents to us the importance of communication within Domain-Driven Design, how the Ubiquitous Language can aid our software designs and the value the Aggregate pattern can bring.
The document discusses new features in Visual Studio 2008 and .NET 3.5 including WPF, the Ribbon interface, LINQ, and language innovations in VB 9.0 and C# 3.0 such as query expressions, lambda expressions, anonymous types, and extension methods. It provides demos of using these new features to build applications and manage data. The architecture of LINQ is also described, showing how LINQ can be used across different data sources.
The document provides guidelines for writing good code, including making it readable, maintainable, and scalable. It discusses techniques like using descriptive naming, splitting functions, consistent coding style, and avoiding deep nesting. It also covers design-level principles like DRY (Don't Repeat Yourself), SOLID (Single responsibility, Open/closed, Liskov substitution, Interface segregation, Dependency inversion) principles. The SOLID principles aim to make code modules are highly cohesive, loosely coupled and easily maintainable.
The document discusses modeling services for a minor enterprise application called Contract first modeling Services using UML. It provides an overview of the contract-first modeling approach, including modeling business processes as use cases and technical services, and then generating interfaces and code from these models. The key benefits of the contract-first approach are that the contract remains stable over time and allows for loose coupling between interfaces and implementations.
The document discusses migrating an existing authentication system at Columbia University to the Central Authentication Service (CAS). Specifically, it addresses:
1) Integrating the legacy service registry and custom attributes into CAS.
2) Adding support for the legacy "WIND" authentication protocol to CAS to allow existing clients to continue using either the legacy or CAS protocols during migration.
3) Customizing CAS login behavior and UI to match the existing system.
The document describes how to create a simple web service in Java that returns a greeting message, and then how to test and consume the web service using a client. Key steps include:
1. Creating a Java class with the @WebService annotation to expose a "sayHello" method.
2. Deploying and testing the web service by invoking the "sayHello" method and viewing the request/response messages.
3. Generating a WSDL file from the web service.
4. Creating a client project and using the WSDL to generate a client to invoke the "sayHello" method.
ASP.NET AJAX allows developers to call remote services from client-side code by exposing server-side code as RESTful services or SOAP web services. It uses JSON serialization to exchange data between the client and server and allows defining callbacks for asynchronous method calls. Page methods provide another way to expose server logic by decorating methods in code-behind classes with the WebMethod attribute.
GraphQL - when REST API is not enough - lessons learnedMarcinStachniuk
This document discusses lessons learned from implementing GraphQL APIs. It begins by describing some limitations of REST APIs, such as requiring multiple roundtrips to fetch nested data. GraphQL is introduced as an alternative that allows clients to specify exactly what data they need in a single request. The document then covers various GraphQL concepts like queries, mutations, and type systems. It also discusses best practices like using a schema-first approach, pagination support, and the DataLoader library to solve the N+1 problem. Testing GraphQL APIs and integrating with Relay are also briefly outlined. The overall message is that GraphQL is a good alternative to REST when clients have complex data needs.
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
Sudheer Mechineni, Head of Application Frameworks, Standard Chartered Bank
Discover how Standard Chartered Bank harnessed the power of Neo4j to transform complex data access challenges into a dynamic, scalable graph database solution. This keynote will cover their journey from initial adoption to deploying a fully automated, enterprise-grade causal cluster, highlighting key strategies for modelling organisational changes and ensuring robust disaster recovery. Learn how these innovations have not only enhanced Standard Chartered Bank’s data infrastructure but also positioned them as pioneers in the banking sector’s adoption of graph technology.
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIVladimir Iglovikov, Ph.D.
Presented by Vladimir Iglovikov:
- https://www.linkedin.com/in/iglovikov/
- https://x.com/viglovikov
- https://www.instagram.com/ternaus/
This presentation delves into the journey of Albumentations.ai, a highly successful open-source library for data augmentation.
Created out of a necessity for superior performance in Kaggle competitions, Albumentations has grown to become a widely used tool among data scientists and machine learning practitioners.
This case study covers various aspects, including:
People: The contributors and community that have supported Albumentations.
Metrics: The success indicators such as downloads, daily active users, GitHub stars, and financial contributions.
Challenges: The hurdles in monetizing open-source projects and measuring user engagement.
Development Practices: Best practices for creating, maintaining, and scaling open-source libraries, including code hygiene, CI/CD, and fast iteration.
Community Building: Strategies for making adoption easy, iterating quickly, and fostering a vibrant, engaged community.
Marketing: Both online and offline marketing tactics, focusing on real, impactful interactions and collaborations.
Mental Health: Maintaining balance and not feeling pressured by user demands.
Key insights include the importance of automation, making the adoption process seamless, and leveraging offline interactions for marketing. The presentation also emphasizes the need for continuous small improvements and building a friendly, inclusive community that contributes to the project's growth.
Vladimir Iglovikov brings his extensive experience as a Kaggle Grandmaster, ex-Staff ML Engineer at Lyft, sharing valuable lessons and practical advice for anyone looking to enhance the adoption of their open-source projects.
Explore more about Albumentations and join the community at:
GitHub: https://github.com/albumentations-team/albumentations
Website: https://albumentations.ai/
LinkedIn: https://www.linkedin.com/company/100504475
Twitter: https://x.com/albumentations
2. Designs are neither good nor bad.
They are more or less useful.
Martin Fowler
3. Service = SOA service
External Interface
Interface contracts
Maps service contracts to/from domain entities
Interacts with DDD services
Cross functional responsibility
26. By design & not by side-effect
Service is a product
Contract is user interface for service
Can help in multi-version capability
27. Banking application contract
class OpenAccountRequest
{
int CustomerId;
DateTime StartingDate;
AccountType AccountType;
Name AccountHolderName;
}
class Name
{
string FirstName;
string LastName;
}
enum AccountType
{
Savings,
Current
}
28. class OpenAccountRequest
{
string CustomerId;
string StartingDate;
string AccountType;
Name AccountHolderName;
}
class Name
{
string FirstName;
string LastName;
}
class OpenAccountRequest
{
int CustomerId;
DateTime StartingDate;
AccountType AccountType;
Name AccountHolderName;
}
class Name
{
string FirstName;
string LastName;
}
enum AccountType
{
Savings,
Current
}
32. class OpenAccountRequest
{
string CustomerId;
string StartingDate;
string AccountType;
string AccountHolderFirstName;
string AccountHolderLastName;
}
class OpenAccountRequest
{
string CustomerId;
string StartingDate;
string AccountType;
Name AccountHolderName;
}
class Name
{
string FirstName;
string LastName;
}
Business doesn’t understand objects
33. ….and definitely not class inheritance
class OpenJointAccountRequest : OpenAccountRequest
{
int AccountNumber;
}
class OpenAccountRequest
{
string CustomerId;
string StartingDate;
string AccountType;
string AccountHolderFirstName;
string AccountHolderLastName;
}
class OpenAccountRequest
{
string CustomerId;
string StartingDate;
string AccountType;
string AccountHolderFirstName
string AccountHolderLastName
string JointAccountNumber;
}
34. Use flat structure, no nested objects
Nested objects only when using list
Business Readable Contract
35. Service operations are not methods
public interface PaymentGatewayService
{
bool Authorize(string cardNumber, string verifiedByVisaPassword);
bool Validate(string cardNumber, string holderName, string cvv);
bool PerformTransaction(string cardNumber, string holderName, string cvv, decimal amount
}
interface PaymentGatewayService
{
CreditCardPaymentResponse Process(CreditCardPaymentRequest request);
}
36. class CreditCardPaymentRequest
{
string CardNumber;
string CVVNumber;
string VBVPassword;
string HolderName;
string Amount;
}
class CreditCardPaymentResponse
{
string ErrorCode;
string ErrorDescription;
string TransactionReferenceNumber;
}
No parameters/return-value/exception
37.
38. Late Binding over Fail fast
Service side validation over schema validation
Loose types over strong types
Error message over system exceptions
Also useful in versioning
47. public class Customer
{
int id;
Name name;
int age;
IList<Account> accounts;
}
public class Account
{
int id;
string number;
DateTime openingDate;
DateTime closingDate;
decimal balance;
IList<Transaction> transactions;
}
public class Transaction
{
int id;
DateTime date;
decimal amount;
TransactionType type;
}
public enum TransactionType
{
Credit,
Debit
}
public class Name
{
string first;
string middle;
string last;
string title;
}
Domain
Model
48. public class Customer
{
int id;
string firstName;
string middleName;
string lastName;
string title;
int age;
}
public class Customer
{
int id;
Name name;
int age;
}
public class Name
{
string first;
string middle;
string last;
string title;
}
Domain Model
Contract
Can tolerate this
49. public class Customer
{
string id;
string firstName;
string middleName;
string lastName;
string title;
string age;
}
public class Customer
{
int id;
Name name;
int age;
}
public class Name
{
string first;
string middle;
string last;
string title;
}
Contract
…even this
Domain Model
50. public class Customer
{
int id;
int customerId;
string firstName;
string middleName;
string lastName;
string title;
int age;
}
public class Customer
{
int id;
int customerId;
string firstName;
string middleName;
string lastName;
string title;
int age;
}
Contract
Encapsulate service internals
Domain Model
51. public class Customer
{
public string CustomerId { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public string Age { get; set; }
}
public class Customer
{
int customerId;
string firstName;
string middleName;
string lastName;
string title;
int age;
}
Encapsulate Domain Model
Contract
Domain Model
52. public class Customer
{
public string CustomerId { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public string Age { get; set; }
}
public class Customer
{
int id;
int customerId;
Name name;
int age;
}
public class Name
{
string first;
string middle;
string last;
string title;
Too much mismatch
Contract Domain
Model
54. public class CustomerService
{
private readonly CustomerRepository customerRepository;
public CustomerService(CustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
public Customer Get (CustomerServiceRequest request)
{
try
{
return customerRepository.LoadCustomer(request. Identification);
}
finally
{
customerRepository.Dispose();
}
}
}
Simple Service Implementation
55. public class Customer
{
Name name;
int age;
}
public class Customer
{
Name name;
IList<Account> accounts;
}
public class Account
{
decimal balance;
IList<Transaction> transactions;
}
public class Transaction
{
int id;
DateTime date;
decimal amount;
TransactionType type;
}
public class Customer
{
Name name;
IList<Account> accounts;
}
public class Account
{
string number;
decimal balance;
}
Customer Profile
Accounts Summary
Transactions Since
Webservices get requests from the client, converts them to domain objects with the help of mappers/repositories, call services with these domain objects, these services orchestrate the domain logic and they will use the repository to write to the database
monolithic architecture diagram (also draw front end box)
test, deploy....no decoupling....small pieces, easier to understand, can be worked upon independently.
Customer/Accounts and Transactions. Caching, batched request might work. Sometimes join at database level is the only resolution.
Opening account with starting balance. AccountService and TransactionService
Multiple domain representation
Need to fix write ownership
Services coupling via database
We haven’t used sub-classes
Accidental or essential
Add more members
Need code sample for Dynamic Proxy here.
I still have duplication. And I have to modify my equals method to look at any new members added – this is error prone.
Equals might have a specific meaning – Id equality for example. Use a method like MemberEquals.
Complicated to implement – with lists, nested objects.
Easy to implement.
Memory intensive if you have a deep object graph - Avoid deep object graphs on the UI.
Or clone only that portion of the object graph which is different – problem: You’ll need a special equals which you have to keep in sync when new members are added, etc.
Should this be CLOBs and/or BLOBs in the DB?
If the XML Schema changes or if the Class definition changes.
When could you use it: if the data is stored only for reference (eg:. Quotes from the quoting engine are valid for 30 days if the accompanying XML response is stored untampered for that period) - probably store the digitally signed message from the other system. Might consider also storing the data in a normalised form if you need to do anything else with it.
Storing presentations/attachments - if the object is really large, consider moving it out of the DB and on to the file system with a reference to the location. Problem with this is that you are trading off the DB performance/size with consistency issues and more complexity dealing with two different places where the truth is stored.
pros: performance and development simplicity
Eg: Insurecom - we were getting XML from a quoting engine. Had to update the XML with new values and send it across. The logic to do this became fairly painful even tho' we only had to update a couple of places in the XML. Also we only ever had to deal with one policy at a time - the user never wanted to deal with all the policies which have a risk rating above 0.8 in one shot, etc.
Eg. Quotes from a quoting engine are valid for 30 days if the accompanying XML response is stored untampered for that period – you probably want to store the message signed by the quoting engine’s private key in your DB as a BLOB.
If the blob is really large, consider storing it outside the DB with a link to the location.