在我破坏应用程序之前,我当前的命名空间看起来像这样:
CompanyAbc.Core
CompanyAbc.AppXyz.Web
CompanyAbc.AppXyz.Business
CompanyAbc.Core命名空间包含我们公司所有应用程序使用的公共代码。一个例子是一个名为“ClientMessage”的类,我们将其用作容器,将消息从一个层传送到另一个层(例如,抽象出来并支持在数据层一直保存数据时显示成功或错误消息。 UI层)
我们现在将CompanyAbc.AppXyz.Business转换为WCF服务。我的问题是:“共享”(或不共享)这些基础/公共实体的最佳做法是什么?
例如,你会:
a)将[DataContract]属性直接添加到CompanyAbc.Core命名空间中的类,即使它与WCF无关。
CompanyAbc.Core.Entities
ClientMessage.cs
OR
b)创建一个数据传输对象,它是CompanyAbc.Core命名空间的精确副本?
CompanyAbc.Core.Entities
ClientMessage.cs
CompanyAbc.AppXyz.Business.DataContracts
ClientMessageDto.cs
OR
c)其他选择?
另一个复杂性是我们打算共享这些程序集。但是为了强制脱钩而不是分享集会/商业实体,你会疯狂地做出类似的事情吗?
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
答案 0 :(得分:1)
我建议你制作"等级组"在您的程序集中,为了使其更简洁,其使用更直观。例如: (以@learner为例作为基础)
ABC.Common (It communicates better the intention)
ABC.Core
ABC.Core.Web
ABC.Core.Windows
ABC.Services.DataContracts
ABC.Services.ServicesContracts
等等......
制定清晰的层次结构会激发开发人员的使用,因为它适合已部署的先前程序集。 查看.NET程序集以获取参考。
答案 1 :(得分: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将Core类投影到DTO中。
让我知道你的想法。