Skip to content

suprcodr/DDD-Based-Enterprise-Application-Framework

 
 

Repository files navigation

Domain Driven Design Based Enterprise Application Framework

An opinionated Enterprise Application Framework based on different Patterns, Principles and Practices of Domain Driven Design. Although not all tactical and strategic Patterns, Principles and Practices of DDD are in place but the most important ones (the ones that are used almost in any Enterprise app) are in place.
This framework is helpful in scenarios wherein one needs to interact with different Integration technologies using different .NET based access technologies (can be DBs, SOAP or RESTFUL Web Services or MQs or File System or an LDAP or any other imaginable data source).Another possible scenario can be in a CQRS (Command Query Responsibility Segregation) environment wherein the commands are processed in an RDBMS like SQL Server whereas the queries are executed to fetch data from NOSQL Dbs. Also, once this framework is completed and if someone uses this framework, at least for the development of a SPA based Web Application or Website or a Mobile Web application, ideally he/or she should need to work only on Domain Modelling(i.e. mainly Domain, Domain Services and Application Services) and UI stuffs(there might be some requirement for extending some extensibility points which are already provided out of the box or creating new extensibility points all-together or some other configuration stuff changes required like DI container specific stuffs or ORM configurations if RDBMS is used etc.).That doesn't mean that all these can be applied only for Web apps or Websites or Mobile Web Application only but in-fact, parts of this framework can be applied to other types of applications as well e.g. Business Process Management and Integration projects as well.
DDD is more about domain modelling for complex domains using concepts of Entities, Value Objects, and Aggregates etc. and separating out your Business functionalities from your technical functionalities. Although this framework provides(or will provide) most of the technical functionalities(out of the box, including the source code) used in an Enterprise app and some base level classes for dealing with Entities, Value Objects, Aggregates etc. but it's not necessary that one is going to need every bit of it. So use this framework (or may be just parts of the framework) diligently after analyzing the requirements for your app meticulously.
Implementation Overview-> Here the CommandRepository(for persisting data) and QueryableRepository(for querying data) are in-memory representation of some external source - mainly DBs(but can be extended to Web Services or MQ interactions as well or any other imaginable data source for that matter). The CommandRepository class needs instances of concrete implementation of BaseUnitOfWork and ICommand which can be injected using some DI Framework like Unity.
UnitOfWork (implements IUnitOfWork members) - De-couples the logic to do atomic transactions across Dbs(can be extended to use Web Services/MQs or some other data source as well to be part of the Transaction) using different DB access technologies(again can be extended to use Web Service/MQs or any other data source). UnitOfWork based transactions can be applied at the API or Domain Services or Repository layer.
ICommand & IQuery- Provides contracts to deal with different DB technologies viz. ADO.NET, Enterprise Library or ORMs like Entity FrameWork Code First etc. and different DBs (current implementation supports mainly SQL Server - but as mentioned earlier also, can be extended to support other DB types as well).

N.B.-> If one wants to think of any imaginable data source as Repository then at least for the query side it's better to have a IQueryable provider for the same (at least to use this framework seamlessly). For an exhaustive list of open source IQueryable providers, one can visit Linq to Everything (well, it's almost EVERYTHING).If some imaginable data source is not mentioned in the afore-mentioned list then one can build his/her own IQueryable provider and hopefully the articles viz. LINQ: Building an IQueryable provider series, Building Custom LINQ Enabled Data Providers, Creating LINQToTwitter library using LinqExtender and Writing A Custom LINQ Provider With Re-linq can be helpful in doing the same. And if anyone builds any LINQ to Something (or "Anything") provider, then please don't forget to share it with the world. Some other intriguing reads on LINQ are Analytic Functions using LINQ, SqlDependency Based Caching of LINQ Queries, Dynamically evaluated SQL LINQ queries, Building LINQ Queries at Runtime in C# and Specification Design Pattern.

Pending Tasks ->
• Incorporation of some tactical DDD stuffs (mainly the common framework elements).
• Trying exploring and incorporating Dapper(a Micro-ORM - Micro ORMs may not provide you some functionalities like UnitOfWork out of the box like that of an ORM but performance wise they are way better compared to ORMs), Event Stores and In-Memory Grid Based Storage.
• Incorporation of some Restful stuffs which are commonly used in most Enterprise Apps.
• Whatever done till now is all Orchestrations rather than Event Driven Choreographies. Even the async await based request reply mechanisms are also actually Orchestrations. True Fire and Forget Event Driven Choreographies (may be with some nominal acknowledgement sent to the requester) following Eventually Consistent approach WILL ALSO BE TRIED, at the Web API Layer using "Event Driven Rest" and at the Business Layer using Zero MQ.Zero MQ was designed from the ground up, keeping in mind stock trading apps wherein very high throughput and very low latency are required, as discussed here.
N.B. -> One can refer the paper - Your Coffee Shop Doesn't use 2 phase commit (written by the Integration Genius - Gregor Hohpe, co- author of the Integration Bible viz. Enterprise Integration Patterns) to see how apps can be implemented without using Transactional Consistency.
• Testing BulkOperations using SQL Express Edition.
• Fixing WCF related Unit Test Case(s).
• Redesign Caching stuffs to support in-memory caching or some scalable option like Windows AppFabric or Redis(a scalable NOSQL option). Ideally, should be designed in a pluggable way to support any cool Caching mechanism coming in future as well. Also should use some AOP or attribute (annotation) based approach to apply Caching or invalidating the Cache else it becomes very hectic to apply these cross cutting concerns everywhere within a large application.
• Exploring Single Page Applications and building a Fluent UI Framework using which the UI layout (HTML + CSS) and UI Behaviors (using JavaScript) can be coded in a fluent way using JavaScript/Typescript. IF POSSIBLE, will try to have plugin features wherein SPA Frameworks like Angular or React can be plugged in as and when required. Will also try to incorporate Offline-First capabilities. All these probably will have a GitHub Project of its own and that will be used in this project.This is going to take quite some time since lots of exploration needs to be done in this area. Some helpful links w.r.t Angular and React can be Angular Open Source Projects, Awesome Typescript Projects and React Open Source Projects.
• Ultimately building a SAAS Framework based on all the above stuffs.
• Fixing or suppressing the Warnings generated by MS Code Analysis Tool (currently, Code Analysis Settings is set to "Microsoft Basic Design Guidelines").
• Also need to run the Code Metrics to check everything is as per standards.

References(not that everything mentioned below is referred to build this framework, but atleast some bits of each of these awesome resources mentioned below have been referred or will be referred) -

  1. Patterns, Principles and Practices of Domain Driven Design.
  2. JavaScript Domain Driven Design.
  3. Practical Domain-Driven Design in Enterprise Java.
  4. Coding for Domain Driven Design.
  5. Domain Driven Design Wiki.
  6. Some very good samples to look out for DDD are Domain-Driven Design Using a Trading Application Example, DDD E-Commerce Sample, Domain Driven Design Using SpringTrader, Click's Hexagonal Domain Driven Architecture and Reactive DDD/CQRS using Akka. Some other good open source DDD apps are like- I and II.
  7. CQRS Wiki, How Eventuate Works, Rinat Abdullin On CQRS, CQRS Myths, When To Avoid CQRS and CQRS Examples.
  8. Again for Unity based DI/IoC container, one can refer Dependency Injection with Unity and Microsoft Unity Succintly.
  9. Almost Anything and Everything about ASP.NET Web API(including ASP.NET WEB API 2: HTTP MESSAGE LIFECYLE), Web API Versioning and Designing Evolvable Web APIs with ASP.NET(source code). To learn the basics of ASP.NET MVC one can go through ASP.NET MVC Interview Questions.Also one can go through ASP.NET MVC Page Life Cycle and ASP.NET MVC Pipeline And Extensibility as well to understand the ASP.NET Page Lifecycle and ASP.NET MVC Extensibility. Also do have a look on Building Custom Owin Middlewares and Building OAuth2.0 using Owin series(to get insights into SSO using JWT for cross domain one can refer this SO article).For API documentation one should use Swagger and a good resource w.r.t ASP.NET Web API is Swagger and ASP.NET Web API.
  10. WCF Basics, WCF Security, WCF Versioning(Data Versioning & Service Versioning) and SOA Apps Using WCF. Also, to build BPM solutions using Windows Workflow Foundation, one can refer WWF docs. Also have a look on one of the most important topic within WCF(which most of us neglect), which is WCF Extensibility(series). Some other important things to seek are WCF Scalability, WCF Dynamic Proxy, Creating WCF ChannelFactory, Unity.WCF, WCF Proxy and IoC, WCF Service Resolution Container Extension and WCF Tracing.
  11. Reasons to use ORM, EF 6 Docs, EF Inheritance, EF Fluent API Relationships, EF DBCommand Interceptors, EF Migrations, EF Concurrency,Dapper vs EF and Dapper Docs.
    N.B. -> Fastest performance is achieved using ADO.NET and for that, ADO.NET Part 1 & ADO.NET Part 2 can be referred.
  12. SignalR Docs and SignalR with DB.
  13. Top JavaScript Frameworks in 2020: How To Make Your Choice, Fullstack JS, JQuery Interview Questions, JS ES6, JS Generators, The many faces of "this" in JS, Pro Single Page Applications and ASP.NET SPA Docs for SPAs.
  14. FluentHTML, Fluent Bootstrap, Fluent HTML for PHP, HTML Object and Tag Builder
  15. Offline First Web Development and Building real-time collaborative offline-first apps with React, Redux, PouchDB and WebSockets.
  16. MS Guidance on Web Development Best Practices, Google's Web Fundamentals and Google Performance Suggestions.
  17. Guide to Semantic Web and Mastering Structured Data on the Semantic Web.

*Also if needed, ASP.NET WebHooks Succintly, Nuget In House Succintly, MSIX Succintly, C# Code Contracts Succintly, T4 Succintly, Async OOP, Microsoft Extensibility Framework and Microsoft Sync Framework might be referred.

**If at all this codebase is migrated to .NET Core then hopefully ASP.NET Core Documentation and Porting to .NET Core will be pretty much helpfull.But currently lots of .NET Framework stuffs are not supported by the current .NET Core version as verified by .NET Portability Analyzer Tool.Also don't have any plans to have a mix and match of .NET Framework and .NET Core environment working together since that would have its own challenges(didn't do any thorough analysis though) and the whole point of using .NET(wholly) for LINUX/MAC is missing in such an approach(although one might suggest to deploy .NET Framework code as a Web Service deployed in a Windows machine while the .NET Core code deployed in some LINUX/MAC machine consuming the Web Service but for sure, that would have its own challenges).Anyways, that's secondary and so MIGHT be taken care at some later point of time.Some other helpful links w.r.t .NET Core are Awesome .NET Core and Asp Net Core Open Source Projects.

*** One of the best way to learn SPA, REST/MicroServices and DDD (including CQRS and Event Sourcing) is to grab some existing good open source projects and then gather the requirements (from the source code), analyze the requirements, architect/design/implement the requirements (along with unit/integration/acceptance testing) using principles of SPA, REST/MicroServices and DDD (may be if needed, can apply parts/whole of this Framework for the same). Some intriguing open source projects in this regard are -
a) ASP.NET - ASP.NET Samples.A good article with regards to comparison of various ASP.NET Technologies is WEB FORMS, MVC, SINGLE PAGE APP, WEB PAGES COMPARISON.
b) E-Commerce - NopCommerce, SmartStore.NET and Virto Commerce.
c) Trading - StockSharp, QuantConnect's Lean, Marketcetera and Modulus.
d) Telecom Billing - jBilling(the Cloud Computing billing model works somewhat in similar lines).Managing Recurring Events In a Data Model is a good read on a DB design approach for handling recurring events(any Billing system has some portions of it which can be visualized as recurring events).Also have a look into the related topics of Dynamic Pricing, Pricing Strategies and Price Optimization(if possible, may be build some open source Pricing Framework).
e) CMS - DotNetNuke, Orchard and Umbraco.
f) CRM - SplendidCRM, ASP.NET CRM and Coevery.
g) Personalization - My Web Pages Starter Kit.
h) Web Portal - DropThings and ASP.NET Portal Starter Kit.
i) Social News - Kigg.
j) Blog - BlogEngine.NET.
k) ECM(Enterprise Content anagement) - SenseNet.
l) SOA - .NET Stock Trader.
m) Workflows(along-with some Utilities) - NeoVolve.Toolkit.This project is more of a toolkit, the utilities and concepts of which can be used to build REST/DDD based Workflow projects.Also watch out for WWF based PageFlow samples like Rule Driven Pageflow / Workflow, ASP.Net Page Navigation using Workflow 4.0 and the WWF based Rehosting project viz. - Rehosted Workflow Designer.
n) ERP - WebVella, MixERP, MERP and Frappe.
o) Concurrency - Parallel Programming Samples and Parallel Programming Extras. Again, please note that these projects are not mentioned for learning SPA or REST or DDD principles directly but the underlying principles can be used for some REST/DDD based projects at the server side.
p) Monitoring - Wolfpack Distributed System Monitoring.Again, this is not mentioned so that this monitoring project can be transformed into a project following all DDD principles but just mentioned so that people(who are not aware of this tool yet) can be aware of this awesome open source distributed system monitoring tool.
q) Some other stuffs(which might be useful) - Some other good code galleries(or projects) to watch out for are ASP.NET Core Samples, .NET Core Samples, .NET Framework Technologies Samples, MicroDot(Samples), Hibernating Rhinos Git Repositories, iDesign's Downloadables, Particular Software's Git Repositories, Wintellect's Git Repositories, HDInsight Git Repository, Microsoft Mobius(somewhat like a .NET port of Apache Spark), Grid Protection Alliance Repositories, Jon Sequeira's Git Repositories, Reactive Streams, OpenScraping HTML Structured Data Extraction C# Library, Ucentrik's Video, Chat and Collaboration Application etc.

Other Good Resources – Most of the references mentioned above are really good(especially for developing this Application Framework) but the resources mentioned below can hopefully make one a better Coder/Designer/Architect/Systems Programmer –>

  1. Coding ->

• Some good resources in .NET space are .NET Docs, Basic .NET Interview Questions, Relationship between CTS and CLS, C# in a Nutshell, C# in Depth, CLR Via C#, LINQ 101, Dependency Injection Principles, Practices, and Patterns, AOP in .NET(Aspect-Oriented Programming, Interception and Unity 2.0 & Run-time AOP vs Compile-time AOP), MetaProgramming in .NET, Concurrency in C# Cookbook, .NET Reactive Extension Resources, Akka.NET Resources, Awesome .NET and .Net libraries that make your life easier.For some intriguing Multithreading articles, refer C# Sharding and Multithreading, PetriDish : Multithreading for Performance in C# and Common Multithreading Mistakes in C#. For .NET Interoprability one can refer Native Interoperability, Exposing .NET Core Component to COM, 32 bit vs 64 bit w.r.t .NET Interoperability and Some .NET Interoperability Resources.

• Also do refer The Best Programming Languages for Each Situation to get a gist of the right language to be used for the job. Some best of the best resources, to learn different language intricacies, can be found at Mark Summerfield's Recommended Books and Notes for Professionals Books. Some other good resources are Head First C, Learn C the Hard way, Learn C++, Learn Python the hard way, Python for Everybody and Full Stack Python.
Specifically for Java, one can refer Learn Core Java, Learn Java 8 and Functional Programming, Learn Java Virtual Machine, Garbage Collection, and Performance, Core J2EE Patterns, Spring Framework Resources for Experienced Developers(including Spring Tutorial & Spring Docs), Hibernate Resources for Java Developers, Integrating Java With C++, Java InterOp Mini Series, Java Interview Questions, Java Puzzlers and Awesome Java.
Most of the languages work well from Concurrency and Availability perspective but what if you want around 5 9s of Availability(like some Telecom projects).Say hello to the Erlang/OTP based language viz.Elixir.For Elixir one can refer Elixir Succintly, Elixir in Action, The Little Elixir and OTP Guidebook and Phoenix in Action(Phoenix is an Elixir based Web Framework).

• An open source server framework which is in quite hype for quite sometime is Node.js and for that, one can refer - You don’t know JS Series,Stoyan Stefanov's JS Books,Nicholas C. Zakas' JS Books, Learning JavaScript Design Patterns,Almost Anything related to Node.js,Node.js in Action,Node.js Design Patterns, Node.js Architecture slides from Slideshare and JS material available at MDN.For Typescript, refer the Typescript docs.For Front End in general, refer Front End Resources.

• Although the JavaScript world has been moving towards Object Orientation(ES6 and ES7) but the irony is that the traditional Object Oriented languages like Java, C# have been moving more towards the functional side and for functional approaches, one can refer(mainly JS and .NET based language resources) - So you want to be a Functional Programmer, Functional Programming in C#, LINQ and Functional Programming via C#, Learning F#, Functional JavaScript, Functional Programming in Javascript and Persistent DataStructure.For Patterns on Functional Programming, refer FP Design Patterns, Where are all the Functional Programming Design Patterns(Check for the answer by Corbin March) and Does Functional Programming Replace GoF Design Patterns.

• And for Unit Testing, The Art of Unit Testing seems to be the best resource.For BDD using .NET refer Automation with Specflow and Specflow Best Practices.

• For SQL one can refer Joe Celko's Books, Introduction to Analytic Functions, Execution Plan Basics, SQL Server Interview Questions I & II, CTE vs Temp Table vs Tmp Variable, Rank vs Dense_Rank vs Row_Number, SQL Partition By, Introductory SQL Big O Complexity Analysis - I & II, Securing connections to SQL Server with TLS, SQL Server Connection String in ADO.NET, MySQL .NET Connection String Options, SQL Server Performance Tuning & Design and SQL Server MVP Deep Dives - Vol I & Vol II.

  1. Design and Architecture -

• Some good resources in general for this space are Clean Code Cheat sheet, Java Design Patterns, Patterns Literature, Microsoft Patterns and Practices, Workflow Patterns, UML Guide, Concurrency Patterns, UML Notations, RDBMS Data Modelling, Bloom Filters and their Applications, .NET Architecture Guides, Architectural Patterns, Software Architect's Handbook, Enterprise Application Architecture with .NET Core, Software Architecture with Spring 5.0, Architecting Data Intensive Applications, Design - Build - Run: Applied Practices and Principles for Production Ready Software Development, Release It!, Architecting Extremely Large Scale Web Applications, O’Reilly’s Beautiful X Series, Anything from WSO2(is just awesome), The Architecture of Open Source Applications, Application Architecture Posts by Martin Fowler, Application Integration Posts by Martin Fowler, Enterprise Architecture Posts by Martin Fowler, Practical SOA For the Solution Architect, O’Reilly’s Software Architecture Series,High Scalability Recommened Books, Architectural Styles and Patterns (including Hexagonal Architecture, Onion Architecture and Microkernel Architecture), Multi Layered Architectures in .NET, Are you a Software Architect, Concurrent Programming for Scalable Web Architectures, Enterprise Architecture Frameworks, Gartner's Hype Cycle For Enterprise Architecture, Gartner's Hype Cycle For Emerging Technologies, ThoughtWorks' Insights and ThoughtWorks' Technology Radar.Another great resource from architecture point of view in the .NET world is MS Patterns and Practices Recommendations.

A framework(infact the most famous) related to Enterprise Architecture is TOGAF and resources related to that are TOGAF Value, Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview, TOGAF Udemy Courses(Part 1 & Part 2.

• Some good resources in this space from the Software Engineering perspective are C4 Model, Cracking the IT Architect Interview, Differences Between Architecture Roles, Architecting High Performing, Scalable and Available Enterprise Web Applications, Just Enough Software Architecture(some recommended texts by this author).

An important aspect of Software Architecture in general is (NFRs)(Non Functional Requirements) and some good resources related to that are Attribute Driven Design and Mastering Non Functional Requirements.Some resources for very specific NFRs are as mentioned below -

a) Performance - .NET Framework Performance, Awesome .NET Performance(for overall website performance, refer My Web Site is so slow… And I don't know what to do about it!, 8 ways to improve ASP.NET Web API performance) Other Performance texts that can be referred are Learning .NET High-performance Programming, C# 7 and .NET Core 2.0 High Performance, ASP.NET Core 2 High Performance and ASP.NET Site Performance Secrets.

A concerning area related to performance is High CPU Usage.High CPU Usage may happen because of various reasons like a program gets stuck in an infinite loop or encounters an unexpected error or some virus or adware infection has occurred, which should be addressed immediately.Some pointers in this respect(not exhaustive) w.r.t .NET code are How to Troubleshoot IIS Worker Process (w3wp) High CPU Usage, How to handle and avoid high CPU, Tight Loop Issue and Resolution, High CPU usage in C# multi-threaded code, Multi-threaded C# Application hitting High CPU Usage, C# Moving panel with mouse causes high CPU usage, Named pipes in service causes high CPU usage etc.

Memory Leaks in code can be another big issue.Some pointers in this respect w.r.t .NET code are Find, Fix, and Avoid Memory Leaks in C# .NET: 8 Best Practices, Detecting .NET applicarion memory leaks, Memory leaks in .Net applications. Yes – they happen all the time…, Everybody thinks about garbage collection the wrong way, Memory Usage Inside the CLR, The Stack, The Heap And The Memory Pitfalls etc.

Some performance tools one should watch out for are mentioned here.

b) Security - An important aspect of any application development is Security and the best resource w.r.t Security seems to be OWASP Security Cheatsheets series.An important aspect of Security is Cryptography and some good resources related to this topic are Cryptography in .NET Succintly, Real World Cryptography, Cryptography Key Types, Cryptography Key Formats, Cryptography for Dummies and Cryptography Engineering.Some other good resources on Security from actual testing perspective during development itself are Application Security - An Easy Start, Automated Security Testing in a Continuous Delivery Pipeline and .NET Penetration Testing.Another aspect related to Security is Ethical Hacking and for that some good resources are Ethical Hacking MOOCs.Another good security related text is Application Security in .NET Succinctly.

c) Scalability - 5 Best High Scalability Books For Web Architects, Architecting for Scale, Scalabilty Patterns.

d) Availability - Design Patterns for High Availability, 5 tips for improving availability, Maintaining highly available applications, Reducing planned and unplanned downtime, High Availability and Disaster Recovery, High Availability IT Services, Blueprints for High Avaiability and Designing High Availability Systems: DFSS and Classical Reliability Techniques with Practical Real Life Examples.

e) Reliability and Resilience – Site reliability engineering (SRE): A simple overview, Site Reliability Engineering, Database Reliability Engineering, The path to resilience, Resilient software design in a nutshell, Practical Resilience, Building Resilient Serverless Systems and Resilient Distributed Systems.

•Again from the Systems Design and Distributed Computing perspective, some good resources are like System Design Primer, System Design Resources, Gainlo's System Design Interview Questions, Object Oriented Design Questions,Design Questions,Software Design Questions, System Design Interview Questions, Large Scale Computing Questions, Trading System Design, System Design Cheatsheet, CPU Cache, Mechanical Sympathy, Designing Data Intensive Applications, Distributed Computing for Fun and Profit, Operating System Support for Warehouse Scale Computing.Some related youtube videos are Gaurav Sen's Playlists, Narendra L's playlists and Tushar Roy's playlists.

  1. Microservices/SOA, Infrastructure/Cloud and DevOps -

•Some good resources w.r.t Microservices are Microservices Implementation Journey, Microservices Architecture, The Evolution of Scalable Microservices, Microservices: From Design to Deployment, a Free Ebook from NGINX, Microservices Authentication and Authorization, Microservices : Flexible Software Architectures, Microservices : A practical Guide, Production Ready Microsoervices, The Tao of Microservices, Spring Microservices in Action, Building MicroServices, Migrating to Microservice Databases: From Relational Monolith to Distributed Data, MicroServices in .NET(mainly the source code can be referred) and The .NET Experience With MicroServices.
From perspective of SOA some good resources are What is SOA, Service Design Patterns, SOA Patterns, SOA Governance In Action and SOA Security.

•Some good resources w.r.t Infrastructure in general are 6 Strategies for Application Deployment, Designing IT Solutions, IT Infrastructure Architecture Blog, Infrastructure Design Book and Infrastructure Design Patterns.

•Some good resources w.r.t Cloud Computing are IAAS vs PAAS vs SAAS, AWS Certifications, AWS Certified Solutions Architect Study Guide, AWS Certified Solutions Architect Professional Study Guide, Path to AWS Certifiied Solutions Architect Professional, Azure Certifications, Azure Solutions Architect Study Guide, Google Cloud Certifications, Google Cloud Solutions Architect Study Guide, AWS Offerings, Azure Offerings, Google Cloud Offerings, AWS to Azure services comparison, Hybrid Cloud for Dummies, Architecting Cloud Computing Solutions ,Hybrid Cloud for Architects, Cloud Computing Service Comparisons, Multi-Cloud for Architects, Cloud Native Application Architecture, Cloud Native Architectures, Migrating to Cloud Native Application Architectures, Beyond the 12 Factor App: Exploring the DNA of Highly Scalable, Resilient Cloud Applications, Cloud Design Patterns, Cloud Academy's Cloud Design Patterns, Implementing Azure Cloud Design Patterns, Implementing Cloud Design Patterns for AWS, Azure for Architects, Azure Architecture Centre, Reliability and Resiliency on AWS, AWS Architecture Centre, Cloud Computing and Distributed Systems, Anatomy of a cloud storage infrastructure, How does Azure work?, Azure Stack Architecture, Azure Virtual Machine Internals – Part 2, Cloud Stack Internals and 7 essential open-source tools for cloud management.

For Serverless Cloud Computing one can refer Serverless Computing, When (and why) not to go serverless, Azure Functions Succinctly, Practical Azure Functions, Integrating Serverless Architecture Using Azure Functions, Cosmos DB, and SignalR Service, Serverless Architectures on AWS, Serverless Design Patterns and Best Practices, Serverless vs PaaS: Is Serverless the New PaaS? and When On-Premise Serverless Beats the Cloud.

For Multitenant SaaS one can refer ASP.NET Multitenant Applications Succinctly, Things to keep in mind while developing Multitenant apps, Architecting a Multi-tenant Application, Patterns of multi-tenant scalability, Inevitability of Multi-Tenancy & SAAS in Product Engineering, Developing Multi-tenant Applications for the Cloud on Windows Azure and Service Orchestration as Organization: Building Multi-Tenant Service Applications in the Cloud.

•For DevOps, one can refer DevOps Wiki(Tools in Practice), DevOps and Continuous Delivery Reference Architectures (including Nexus and other popular tools), DevOps and Continuous Delivery Reference Architectures - Volume 2, Jenkins, Chef, Ansible, Docker(Virtualization vs Containerization - can be used together as well), Deploying .NET Framework applications with Docker, .NET Core application deployment, .NET Core and Docker, Kubernetes(Kubernetes in Simple Words), Running ASP.NET Applications in Kubernetes — A Detailed Step By Step Approach, Automated Delivery of ASP.NET Core Apps on On-Prem Kubernetes using Jenkins, Configuring CI/CD on Kubernetes with Jenkins & Ansible, Terraform and HashiCorp's Cloud Infrastructure Automation.Other good texts w.r.t Docker and Kubernetes are Using .NET Core, Docker, and Kubernetes Succinctly, Docker Succinctly and Kubernetes Succinctly.

  1. IoT(Internet Of Things) -
    For IoT, one can refer NPTEL's IoT courses(I, II, III and IV), Design Patterns for IoT, IoT for Architects, Enterprise IoT, Build Your Own IoT Platform, Building Arduino Projects for the Internet of Things, Windows 10 for the Internet of Things, Demystifying Internet of Things Security, The IoT Hacker's Handbook, Practical Industrial Internet of Things Security, Secure and Smart IoT : Using Blockchain and AI, Architecture for IOT applications, IoT Reference Architecures, CQRS and Event Sourcing for IoT, My Driving IoT Reference Architecture, Microsoft Azure IoT Reference Architecture, Azure IoT Reference Architecture, WSO2 Reference Arcghitecture for IoT, A Context Aware Computing Based Reference Architecture for the Internet of Things and Internet of Things: Principles and Paradigms.
    2 topics related to IoT are Networking and OEM based Embbedded Systems.
    For Networking one can refer Head First Networking, Forouzan's Network Books, Awesome Networking, C# Network Programming, Hands On Network Programming with C# and .NET Core, TCP/IP Sockets in C# and Multicast Sockets.Related to Networking is IoT Connectivity and to get an overview of the technologies enabling IOT Connectivity, one can go through Connectivity Technologies for IoT, Connectivity and networks for the Internet of Things data deluge, Choosing IoT‐connectivity?, The future of connectivity: Enabling the Internet of Things etc.
    For Embbedded Systems one can refer NPTEL's Embedded Systems Course, Embedded Artistry, IIT Bombay's Embedded Systems Course, Jonathan Valvano's Courses, Raspberry Pi Projects for Dummies, Embedded and Real Time Systems, Embedded/Real Time Systems Programming, Programming for Embedded Systems, Hands-On Embedded Programming with C++17, Embedded Systems Architecture, Embedded Systems Architecture for Engineers and Programmers, Awesome-Embedded, Assembly Language Succintly, Building Embedded Systems, Reusable Firmware Development, 5 Best-Selling Windows IoT Core eBooks, Pro Linux Embedded Systems, Building Embedded Linux Systems, Mastering Embedded Linux Programming, Linux Kernel in a Nutshell, Linux Device Drivers, Embedded System Design Patterns, Embedded Control Systems Design/Design Patterns, Design Patterns for Embedded Systems in C, Building Apps for the Universal Windows Platform, UWP Succinctly, More UWP Succinctly, Nano Framework, GSM Projects with C#, Wireless Communication in Arduino Using RF Communication etc.
    N.B. -> To design and implement the hardware & firmware for an Original Equipment, knowledge of Computer Organization, Comuter Architecture and Systems Programming(alongwith Operating Systems & RTOS) might be needed and for these one can refer NPTEL's Computer Architecture and Organization Courses(I, II, III, IV, V, VI), Computer Arithmetic, Computer Architecture, Computer Organization & Embedded Systems, Computer Architecture : A quantitative Approach, Computer Systems: A Programmer's Perspective, Nand to Tetris, System Software, NPTEL's Operating System and RTOS Courses(I, II, II, IV, V), Think OS, Best OS Resources, Linux Systems Programming, Hands-On Systems Programming with Linux, Best RTOS resources etc. A good excercise w.r.t Operating Systems would be solve the problem mentioned here and a solution for the same is available here.Put some real time constraints on the aforementioned problem and try to solve it and ultimately you will end up building a real time system on your own.
    One more topic related to IoT is Wireless Sensor Networks and for that one can refer Best WSN Texts, Building Wireless Sensor Networks Using Arduino and Hands-On Wireless Sensor Networks with ESP32.
    Antother topic of interest in IoT field is Audio and Video Processing and Communication and for that one can refer RTP in C#.

  2. Blockchain & Distributed Computing- Some good resources on this topic are Henry He's Blockchain Articles, BlockChain Applications - A Hands On Approach, Blockchain Programming in C# and Microsoft's CoCo Framework.A subject related to Block Chain is Distributed Computing and for that, one can refer resources like IIT Bombay's Advanced Distributed Computing Course, NPTEL's Distributed Computing Courses(I, II, III), Apache Kafka - Core Internals, I Heart Logs, Designing Data Intensive Applications, Database Internals, Distributed Computing for Fun and Profit, Introduction to Reliable and Secure Distributed Computing, The Science of the BlockChain and Coursera's Cloud Computing Splialization.3 topics related to Distributed Computing(& to some extent to Blockchain) are P2P, Distributed Hash Table and Streaming. For P2P one can refer Best P2P Resources, for Distributed Hash Table some good resources are Kademlia Wiki, The Kademlia Protocol Succinctly while for Streaming one can refer Streaming Data, Making Sense of Streaming, Streaming Systems, LMAX Disruptor, LMAX Disruptor Performance, Streaming Algorithms and Data Structures and WSO2's Stream Processor.

N.B. -> It’s not that I have read/viewed everything mentioned above but yes, I have read/viewed a few of them (partially or completely) and many are yet to be even started(for reading) but all the resources mentioned above are some of the best resources(as per my interaction with some beautiful minds and my own exploration). Also, something not mentioned in the above list doesn't mean that it's not good - only that I am not aware of(or not my preference).Also, once completed, this DDD framework can be considered (as a whole or in parts) as a Reference Architecture for quite a variety of application scenarios. Ultimate goal is to build an Omni-Channel Offline-First Single-Page-Application based SaaS Framework using DDD and Restful API concepts (although parts of the framework can be used for a BPM and Integration Project as well).

P.S. -> In recent past, not been able to give much time for the development of this project for various reasons and don't think will be able to contribute to this project anymore (not at least in near future). My Apologies! If someone can fork this project and continue working on the pending tasks or may be along with that, add his/her own ideas and implement the same that would be really great. Thanking that someone (if any), in advance.

About

A Domain Driven Design Based Enterprise Application Framework

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 58.3%
  • JavaScript 32.5%
  • HTML 9.0%
  • Other 0.2%