As I’ve been going through this educational experience, I’ve tried to come up with a naming convention that makes a little sense. In other projects, I’ve usually started with a ProjectName.Core which held the main business logic for the system being authored. From there, I usually wind up with a ProjectName.Api, a ProjectName.Portal, maybe a ProjectName.Api and a few ProjectName.[Something]Service for backend tasks.
With this exploration, after 3 efforts of kicking something real off, I’ve discovered one change that I’m looking at making ongoing to the system. Logically, ProjectName."Core" holds the logic used throughout the Api, Portal, and [Something]Services, so ongoing, the plan will be to structure as:
ProjectName.Portal.[Area of Concern]Portals, if there is the need for having multiple APIs within the solution, again, the naming convention will most likely be ProjectName.Api.[Area of Concern]ProjectName.Client nomenclature should solidify this concept.Aggregates are things that describe something represented within the context of a system, such as a BankAccount, GiftCard, Shopping Cart, etc.
Commands are the instructions of things to do within the system (e.g. CompleteTransaction).
Nomenclature for commands are to describe them as a task that must be done. “Do This”, “Add That”. Describe what you want done as-if you were doing so in the real world.
Events are things that have happened in the system (e.g. TransactionCompleted).
Nomenclature for events are to describe them as the result of a task. “Transaction Completed”, “Item Added”, etc. These are the items within the “ledger” that are immutable in nature.