イベントドリブンアーキテクチャに取り掛かり、コマンドとイベントの命名規則が何であるかを知りたいと思います。私はこれを多く知っています:イベントはフォームSomethingHappenedにする必要がありますコマンドはDoSomethingのフォームにする必要があります。明確にする必要があるのは、コマンドに「コマンド」を、イベントに「イベント」を追加する必要がある場合です。 DoSomethingCommandとは対照的に、DoSomethingとSomethingHappenedEventはSomethingHappenedとは対照的です。私はまた、その理念がコミュニティ優先コンベンションの背景にあるのか知りたいと思う。ありがとう!コマンドとイベントの命名規則
答えて
Command
およびEvent
の接尾辞はオプションであり、優先事項です。私はそれらを省略して、名前だけからその意図を明白にすることを好む。コマンドとイベントに名前を付ける最も重要な点は、技術ドメインよりもビジネスドメインを反映していることを確認することです。 Create、Update、Add、Changeのような多くの用語は、あまりにも技術的であり、ビジネスドメインではあまり意味がありません。たとえば、UpdateCustomerAddress
というのではなく、より大きなビジネスコンテキストを持つRelocateCustomer
と言うことができます。
ありがとう、私はこのアプローチを使用して実装を開始しました。私は@MikaelÖstbergのネームスペースの使い方の点も好きです。イベント/コマンドを追加すると、オブジェクトをインスタンス化する際の読み込みが良くなっているように見えましたが、私が気付いたのはちょっとしたことです。比較: 'VARのuserSignedOut =新しいUserSignedOut(){};' ' bus.Publish(userSignedOut);' ' bus.Publish(userSignedOutEvent);' を 'VARのuserSignedOutEvent =新しいUserSignedOutEvent(){}を有します。 ' – Tolu
私の慣習は名前空間に依存し、それは私が接尾辞イベントもコマンドも使用しないことを意味します。
また、コマンドとイベントは、影響を受ける集約タイプに基づいて別々の名前空間に編成されます。
例:
// Commands
MyApp.Messages.Commands.Customers.Create
MyApp.Messages.Commands.Orders.Create
MyApp.Messages.Commands.Orders.AddProduct
// Events
MyApp.Messages.Events.Customers.Created
MyApp.Messages.Events.Orders.Created
MyApp.Messages.Events.Orders.ProductAdded
要件に応じて、あなたが別のアセンブリにあなたのイベントを配置することをお勧めします。この理由は、ダウンストリームシステムにイベントを配布する必要がある場合に発生します。その場合、おそらくダウンストリームシステムがあなたのコマンドについて気にする必要がないように(そうしてはならないので)、あなたはおそらく望んでいません。
ありがとう、@ミカエル。これは多くの意味を持ち、私が現在傾いている方向です。標準的なプラクティスが何であるかを明確にしたかっただけです。 – Tolu
私はこれが標準的な習慣であるとは言いません。これは私のやり方です。しかし、これは、ネームスペースをフルネームの一部として使用し、サフィックスやものであなた自身を繰り返さないネットの規則に従うと思います。唯一の欠点は、「作成済み」という20のイベントのうちの1つにusingステートメントを追加したいときに、resharperがたくさんのオプションを提供することです。 –
私はコマンドとイベントを別々のアセンブリに分けて、前述の@MikaelÖstbergとは異なる名前空間を使う傾向があります。私は、これらのメッセージの最後にコマンドやイベントをタックすることを推奨しません。 +1 –
yorコマンド/イベントの名前が正しく指定されている場合、コマンドとイベントの追加は冗長な情報になります。これはあなたのコードを読みにくくするノイズになります。ハンガリー記法を覚えていますか?私が知っているほとんどのプログラマーはもうそれを使用しません。
コマンドとイベントは、アプリケーション用に言語 ... APIを構成します。 「コマンド」や「イベント」のような用語の使用は、エンジニアリング用語がエンティティの目的に意味をなされるシステムレベルの定義にはおそらく役に立ちますが、ドメインの動作の定義を扱う場合は、システム/技術用語を削除し、ビジネススピークに賛成する。あなたのコードをより自然に読んで、タイピングを減らします。 私は 'Command'/'Event'付属品から始めましたが、それは時間の無駄であり、普及したユビキタス言語DDDから私を引き離したことに気付きました。 HTH、 マイク
は、私は多くのことを見て自分自身を使用してきた大会は、イベントが過去形にすると何が起こったのか説明しなければならないことである。
- は
- をUserRegistered
- をAccountActivated をReplyPosted
コマンドはあなたがしたいことです。そうすることを示す名前を作成します。組織のよう
- でCreateUser
- UppgradeUserAccount
を、私は通常、彼らがためのものであることを根骨材と一緒にそれらを置きます。あなたができることとどのような出来事が起こったのかを見るのがずっと簡単です。
つまり、私は各ルート集合体の名前空間を作成し、その下にすべてを置く(リポジトリ定義、イベント、コマンド)。
- MyApp.Core.Users
- MyApp.Core.Posts
など
- 1. 命名規則
- 2. 命名規則
- 3. 命名規則とネームスペース
- 4. 命名規則 - uinavigationcontrollerとルートビュー
- 5. ビットマスクパラメータ命名規則?
- 6. serialVersionUID命名規則
- 7. JPasswordField命名規則
- 8. インテントキー命名規則
- 9. BEM:命名規則
- 10. Rails、命名規則
- 11. スタイリングとイベントのCSSクラスの命名規則は何ですか?
- 12. ウェブサイトの命名規則
- 13. C#プロジェクトの命名規則
- 14. ベースファイルの命名規則
- 15. ベースコントローラーの命名規則
- 16. リポジトリの命名規則
- 17. Androidリソースの命名規則
- 18. モジュラーアプリケーションのデータベーステーブル命名規則
- 19. SQL命名規則のアドバイス
- 20. ローカルパラメータラベルの命名規則
- 21. プロパティの命名規則
- 22. Cの命名規則
- 23. cssメニューの命名規則
- 24. Facebookスタイルの命名規則
- 25. Eclipseプロジェクトの命名規則
- 26. フライウェイマイグレーションの命名規則
- 27. Javabeanの命名規則
- 28. フィルタの命名規則
- 29. SQLジャンクションテーブルの命名:規則
- 30. テンプレートオブジェクトの命名規則
ありがとう!ちょうどそうした。方法を理解するために少し時間がかかりました。 – Tolu