3

アプリケーションを壊す前は、現在の名前空間は次のようになっています。

CompanyAbc.Core
CompanyAbc.AppXyz.Web
CompanyAbc.AppXyz.Business

CompanyAbc.Core名前空間には、当社のすべてのアプリケーションで使用される共通のコードが含まれています。例としては、「ClientMessage」と呼ばれるクラスがあります。これは、ある層から別の層にメッセージを運ぶためのコンテナとして使用します(たとえば、データ層でデータを保存するときに成功メッセージまたはエラーメッセージを抽象化して表示することをサポートします。 UI層)

現在、CompanyAbc.AppXyz.BusinessをWCFサービスにしています。私の質問はこれです:これらのベース/共通エンティティを「共有する」(または共有しない)ためのベストプラクティスは何ですか?

たとえば、次のようにしますか。

a)WCFとは関係ありませんが、CompanyAbc.Core名前空間のクラスに[DataContract]属性を直接追加します。

   CompanyAbc.Core.Entities
            ClientMessage.cs

また

b)CompanyAbc.Core名前空間からの正確なコピーであるデータ転送オブジェクトを作成しますか?

   CompanyAbc.Core.Entities
            ClientMessage.cs
   CompanyAbc.AppXyz.Business.DataContracts
            ClientMessageDto.cs

また

c)その他のオプション?

もう1つの複雑さは、これらのアセンブリを共有することを意図していることです。しかし、デカップリングを強制し、アセンブリ/ビジネスエンティティを共有しないために、あなたはすべてを狂わせて、このようなことをしますか?

   CompanyAbc.Core
   CompanyAbc.Core.Shared.Entities
      ClientMessage.cs

   CompanyAbc.AppXyz.Web
   CompanyAbc.AppXyz.Web.Entities
      ClientMessage.cs --> derives from the Core.Shared, or just duplicate code?

   CompanyAbc.AppXyz.Business.Entities
      ClientMessage.cs --> derives from the Core.Shared, or just duplicate code?
   CompanyAbc.AppXyz.Business.DataContracts
      ClientMessageDto.cs
4

2 に答える 2

1

アセンブリをより簡潔にし、その使用法をより直感的にするために、アセンブリに「階層グループ」を作成することをお勧めします。例:(@learnerの例をベースとして)

ABC.Common (It communicates better the intention)
ABC.Core
ABC.Core.Web
ABC.Core.Windows
ABC.Services.DataContracts
ABC.Services.ServicesContracts

等々 ...

明確な階層を作成すると、すでにデプロイされている以前のアセンブリに適合するため、開発者による使用が促進されます。参考のために.NETアセンブリを見てください。

于 2014-11-29T00:42:19.320 に答える
0

これまで使用していた名前空間は次のようになります。

ABC.Core
ABC.Data
ABC.Business
ABC.Web;
ABC.Services (common)
ABC.Services.DTO (common)
    ABC.Services.Svc1
        ABC.Services.Svc1.DTO
    ABC.Services.Svc2
        ABC.Services.Svc2.DTO

実際には、サービス間でそれほど多くの共有クラスを使用することは望ましくありません。サービス間でクラスを分離する必要があるためです。互いに独立しているほど、バージョン管理もできますが、各サービスのDTOレベルで少し重複したコードが必要になるのは事実です。多くの人がAutomapperを使用してコアクラスをDTOに投影します。

どう考えているか教えてください。

于 2012-07-26T21:11:26.913 に答える