-
Notifications
You must be signed in to change notification settings - Fork 1
archi@modular archi
-
The Onion Architecture : part 1
- The database is not the center. It is external.
- The big difference is that any outer layer can directly call any inner layer.
- Infrastructure is pushed out to the edges where no business logic code couples to it.
- The code that interacts with the database will implement interfaces in the application core.
- Sample app: https://bitbucket.org/jeffreypalermo/onion-architecture/src/default/
Traditional | Onion |
---|---|
Different views of the same arch (example app is CodeCamp Server):
Flattened | Layered |
---|---|
-
Others views on Onion arch
-
The Clean Architecture variant (aiming at synthesizing other similar architectures, onion, hexagonal...)
- Hexagonal Architecture
Tout dépend du Domain, le Domain ne dépend de rien.
Ports and adapters
Une organisation à éviter est de regrouper les classes par types. Par exemple le répertoire des “ports”, ou le répertoire des “repositories” (si vous utilisez ce pattern), ou le répertoire des “services”. Pensez 100 % métier dans votre code métier, y compris pour l’organisation de vos modules ou répertoires ! L’idéal est de pouvoir ouvrir un répertoire ou un module de la logique métier et de comprendre tout de suite les problèmes métier que votre programme résout ; plutôt que de ne voir que des répertoires “repositories”, “services”, ou autre “managers”.
- Simplifier la paire Module/Definition --> Tout dans Definition
- Simplifier le fx de validation ?
- Moins fonctionnel, plus procédural
- Revoir les interfaces d'exposition des résultats de validation
- Done: moins d'interfaces ; on renvoie directement des
ValidationRule<string>
- Done: moins d'interfaces ; on renvoie directement des
- Hashicorp has developped a golang/gRpc based plugin framework. It is open-sourced here: https://github.com/hashicorp/go-plugin
- Example interop with python plugin: https://github.com/hashicorp/go-plugin/blob/master/examples/grpc/plugin-python/plugin.py
- Protocol negotiation: https://docs.hashicorp.com/sentinel/internals/plugins
- Messages definition: https://github.com/hashicorp/sentinel-sdk/blob/master/proto/import.proto
- Broker? https://github.com/hashicorp/go-plugin/blob/master/grpc_broker.proto
- Multiplexing?
- Limiting concurrent threads: http://markheath.net/post/constraining-concurrent-threads-csharp
- Powershell Micro-service with Docker: https://dfinke.github.io/powershell,%20docker,%20pode/2020/08/01/PowerShell-Microservice-Hello-World.html / See also:
- Polly (circuit breaker and the likes...): https://github.com/App-vNext/Polly
- https://insidethecpu.com/2015/05/22/microservices-with-c-and-rabbitmq/
- https://insidethecpu.com/2015/07/17/microservices-in-c-part-1-building-and-testing/
- https://insidethecpu.com/2015/07/31/microservices-in-c-part-2-consistent-message-delivery/
-
https://softwarerecs.stackexchange.com/questions/18860/c-library-for-windows-process-management
- https://archive.codeplex.com/?p=psinterop
- http://www.crawler-lib.net/child-processes
- https://archive.codeplex.com/?p=wolfpack
- https://stackoverflow.com/questions/3740256/process-management-in-net
- https://stackoverflow.com/questions/15528015/what-is-the-difference-between-a-saga-a-process-manager-and-a-document-based-ap
- https://stackoverflow.com/questions/8153358/management-running-process
- https://social.msdn.microsoft.com/Forums/vstudio/en-US/4f8ac9a7-1c80-4294-8d8e-8e233bf8c521/c-console-app-to-monitor-a-process-and-its-cpu?forum=csharpgeneral
- https://inov8.wordpress.com/2010/08/29/c-asp-net-creating-an-asynchronous-threaded-worker-process-manager-and-updatepanel-progress-monitor-control/
- https://www.romaniancoder.com/pmonitor/
- retlang: https://github.com/Hades32/retlang
- fibrous: https://github.com/chrisa23/Fibrous
- Rx: http://reactivex.io/
- How is it possible to run Wordpad by just typing its name even though it isn’t on the PATH? https://blogs.msdn.microsoft.com/oldnewthing/20110725-00/?p=10073/
- Retrieve executables from Path on Windows:
- Linux:
- Which source code: https://sources.debian.org/src/debianutils/4.8.6/which/
- Home: https://servicestack.net/
- Doc: http://docs.servicestack.net/
- GitHub: https://github.com/ServiceStack
- RabbitMQ:
- Doc: http://docs.servicestack.net/rabbit-mq
- Setup: https://github.com/ServiceStack/rabbitmq-windows
- https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Server.Tests/Messaging/MqServerIntroTests.cs
- https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/Messaging/MqServerAppHostTests.cs
- https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.Common.Tests/Messaging/RabbitMqTests.cs
- http://proto.actor/
- C++ port (very very early stage...): https://github.com/whitglint/protoactor-cpp
- Uses gRPC; X-platform: .NET, Java, Go
- Similar to Orleans (virtual actors: Grains)
- http://actor-framework.org/
- https://actor-framework.readthedocs.io/en/stable/
- https://github.com/actor-framework/actor-framework
- http://matthias.vallentin.net/slides/caf-rise.pdf
- CAF: NO https://groups.google.com/forum/#!topic/actor-framework/-SsSiLdTico
- Akka Artery (Experimental, UDP): https://doc.akka.io/docs/akka/2.4/scala/remoting-artery.html
- Based on Aeron (UDP *cast Java lib with Java/C++/.NET clients) : https://github.com/real-logic/Aeron
- https://github.com/AsynkronIT/protoactor-go/issues/35