【发布时间】:2011-08-12 01:23:36
【问题描述】:
我正在设计一个分层架构(服务/业务逻辑层、数据访问层),并且正在努力解决几个问题的交集。
- Entity Framework 4.1 不直接支持接口
- 我的接口包含具有读/写属性的其他接口的集合
- 这意味着使用实现类也不起作用,因为它仍会引用另一个接口类型
示例(请原谅写得不好的代码,这是我的临时想法):
数据访问层
public interface IEmployer
{
string Name { get; set; }
ICollection<IEmployee> Employees { get; set; }
}
public interface IEmployee
{
string Name { get; set; }
}
public class Employer : IEmployer
{
public string Name { get; set; }
public ICollection<IEmployee> Employees { get; set; }
}
public class Employee : IEmployee
{
public string Name { get; set; }
}
public class DataManager
{
public IEmployer GetEmployer(string name) { ... }
public IEmployee CreateEmployeeObject(string name) { ... }
public void Save(IEmployer employer) { ... }
public void Save(IEmployee employee) { ... }
}
服务层
[DataContract]
public class Employee
{
[DataMember]
public string Name { get; set; }
}
public class HireService
{
public void HireNewEmployee(Employee newEmployee, string employerName)
{
DataManager dm = new DataManager();
IEmployer employer = dm.GetEmployer(employerName);
IEmployee employee = dm.CreateEmployeeObject(newEmployee.Name);
dm.Save(employee);
employer.Employees.Add(employee);
dm.Save(employer);
}
}
没有 EF,上面的工作正常。 IEmployee 类型用于服务层,与 Employee 数据契约类型不冲突。但是,EF 不能使用接口,所以我需要使用类而不是接口。
我看到了几个选项:
- 将 IEmployer/IEmployee 更改为类,保留相同的名称
- 将 IEmployer/IEmployee 更改为类,重命名为 EmployerDAL/EmployeeDAL
- 将 IEmployer/IEmployee 更改为 classes,重命名为 Employer/Employee,在任何使用它的服务类的开头使用 EmployerDL = DataLayer.Employer
对于在业务层和数据层都定义的类名,我应该遵循什么命名约定?
与此类似的问题:What's the naming convention for classes in the DataAccess Project? 除了 EF 导致接口问题。
【问题讨论】:
标签: wcf entity-framework naming-conventions data-access-layer n-tier-architecture