gpt4 book ai didi

wcf - 分层架构和 Entity Framework 的类命名约定

转载 作者:行者123 更新时间:2023-12-04 19:46:15 24 4
gpt4 key购买 nike

我正在设计一个分层架构(服务/业务逻辑层、数据访问层),并且正在努力解决一些问题的交集。

  • Entity Framework 4.1 不直接支持接口(interface)
  • 我的接口(interface)包含具有读/写属性的其他接口(interface)的集合
  • 这意味着使用实现类也不起作用,因为它仍然会引用另一个接口(interface)类型

  • 示例(请原谅写得不好的代码,这是我脑子里的临时代码):

    数据访问层
    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 不能使用接口(interface),所以我需要使用类而不是接口(interface)。

    我看到几个选项:
  • 将 IEmployer/IEmployee 更改为类,保留相同的名称
  • 将 IEmployer/IEmployee 更改为类,重命名为 EmployerDAL/EmployeeDAL
  • 将 IEmployer/IEmployee 更改为类,重命名为 Employer/Employee,在任何使用它的服务类的开头使用 EmployerDL = DataLayer.Employer

  • 对于在业务层和数据层中定义的类名,我应该遵循什么命名约定?

    与此类似的问题: What's the naming convention for classes in the DataAccess Project?除了 EF 会导致接口(interface)出现问题。

    最佳答案

    实际上,在您的 DAL 中定义的类应该是您的业务层中使用的类 - 这些是您真正的域对象。从您的业务层公开的类只是数据传输对象,因此如果您想构建任何约定,您应该恕我直言重命名您的数据契约(Contract)。

    无论如何,命名约定是非常主观的。选择最适合您需求的方式,并在该命名中保持一致。

    关于wcf - 分层架构和 Entity Framework 的类命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774080/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com