9

概要

どっちの名前がいい?

  • Domain.PersonService
  • DomainServices.PersonService
  • DomainServices.PersonDomainService( のようないくつかの長い名前を検討してくださいPersonDomainServiceModelDecorator)

または、他の何か?

状況

各レイヤーにいくつかの基本クラスがあるフレームワークがあります。元。リポジトリ、ドメイン サービス、UI など

各論理層には名前空間として使用される名前があります。

  • リポジトリを含むデータ層の「データ」。元。Fx.Data.DbContextRepository
  • ドメイン (Web ではない) サービス層の「サービス」。元。Fx.Services.CrudService
  • Web UI レイヤーの「Web.UI」。元。Fx.Web.UI.Controllers.CrudController

また、いくつかの追加レイヤーを含む最終プロジェクトについても同じルールに従います。

  • 「データ」 例Project.Data.PersonRepository
  • 「サービス」例Project.Services.PersonService
  • 「Web.UI」例Project.Web.UI.Controllers.PersonController
  • コード優先エンティティの「エンティティ」。元。Entities.Person
  • オブジェクト モデルの「モデル」。元。Models.Person.Criteria、Models.Person.PersonDeleteModel

私は「ドメイン サービス」層に焦点を当てていますが、他の層についてのアイデアも歓迎します。

最終的に、「サービス」は「ドメイン サービス」に適切な名前ではないという結論に達しました。これは、「Web サービス」レイヤーと「ドメイン サービス」レイヤーの間にあいまいさが生じる可能性があるためです。

ここで、"Services" 名前空間を "Domain" または "DomainServices" に変更しています。しかし、別の問題があります。すべてのドメイン サービス クラスに「サービス」サフィックスを付けます (例PersonService)。「DomainService」という接尾辞 (例:DomainServices.PersonDomainServerまたはDomainServices.DomainPersonService) を付けるのは醜いようです。

したがって、クラス名がドメイン名前空間の下のサービスであることを示しているときに、「ドメイン」を名前空間として使用する方がきれいな場合があります (例Domain.PersonService)。

4

4 に答える 4

6

私は2つの簡単なアイデアに行きます:

  1. 可能な限り、重複のない完全な名前 (名前空間 + 型名) を定義するようにしてください (同じ名前の部分 - ドメイン、人、サービス、モデル、コントローラーなど) は 2 回出現しないようにしてください)。

  2. .NET フレームワーク自体からインスピレーションを得ます。そこには40000以上のクラスがあります!.NET Reflector や ILSpy などのツールですべてのアセンブリを開き、注意深く調べます。

私はこのようなものを思いつきます:

Domain
 + Person
 + PersonService // Domain service
Domain.Data
 + PersonRepository
Domain.ServiceModel // WCF, etc. I chose the same namespace as .NET Framework
 + PersonService // Service implementation, this is really a service so "service" redundancy seems unavoidable here
Domain.Web.UI
 + PersonController

わかりました、同じ型名が階層内に複数回出現するのは明らかに不便です。まあ、それが名前空間 (および名前空間エイリアス) も存在する理由です。そんなに大したことではないと思います。

于 2013-07-28T06:48:01.233 に答える
3

あなたのプロジェクトでDomainとの間に違いはありますか? DomainServicesサービスと他のドメイン エンティティを別々の名前空間に保持したい場合は、名前空間に移動する必要があると思いPersonServiceますDomainServices

ほとんどの場合、私たちは名前空間を調べません。クラスについてのみ言及します。そのため、名前空間があっても問題ないと思いDomainServicesます。同じ時点でアプリケーション全体で単一のドメインを持っていて、それを分離する予定がない場合は、それを呼び出した方がよいと思いますDomain.PersonService

クラス名に含まれる「Doman」という単語については、名前が複雑になるため、私はあまり好きではありません。アプリケーションをそのように構築して、PersonServiceドメイン サービスであることを 100% 確認する必要があります。あなたが開いているときPersonRepository、それはDataレイヤーであり、ドメインと同じです。

于 2013-07-23T07:23:04.473 に答える
1

私の提案は、それを次のように置くこと <Company>.<Component>.<SubComponent>.<Module>.DLL**です。Microsoft は、このリンクhttp://msdn.microsoft.com/en-us/library/vstudio/ms229048(v=vs.100).aspxで同様のものを推奨しており、例は **Microsoft.Practices.EnterpriseLibrary.Security になります。 DLL

したがって、あなたは一緒に行きたいかもしれませんCompany.Domain.PersonService

于 2013-07-29T17:45:58.090 に答える