我在应用程序的 Visual Studio 解决方案中有以下项目:
- 通用 - 实用方法和扩展
- 实体 - 具有特定于实例的业务逻辑的富域对象
- 存储库 - 数据存储库
- DataServices - Repositories 的瘦包装器,包含不特定于实例的业务逻辑
- 接口 - 实体和存储库的所有接口
我将接口放入单独项目的原因是避免循环项目引用。这允许两个项目引用一个公共接口,避免同时引用具有具体实现的项目。
我故意在 Interfaces 项目中没有项目引用,以避免循环项目引用。我为其他项目中定义的类创建一个接口,这允许我引用对象接口,而不是其他接口中的具体实现。
所以一个例子是:
namespace Acme.Entities
{
public class Person : IPerson
{
string Name { get; set; }
}
}
namespace Acme.Interfaces
{
public interface IPerson
{
string Name { get; set; }
}
}
namespace Acme.Interfaces
{
public interface ITeam
{
string Name { get; set; }
IPerson Leader { get; set; }
}
}
我遇到的问题是当接口引用另一个项目中定义的枚举时。如果不移动接口项目下的枚举,我不确定如何在不创建项目引用的情况下引用枚举,例如:
namespace Acme.Entities
{
public enum Status
{
Unknown =0,
Active = 1,
Active = 2
}
}
namespace Acme.Interfaces
{
public interface IPerson
{
string Name { get; set; }
Acme.Entities.Status ActiveStatus { get; set; }
}
}
除非我引用 Acme.Entities 项目,否则 Acme.Entities.Status 将失败,但这将创建循环引用,因为 Acme.Entities 引用了 Interfaces 项目。