0

我们在 MVC 4 应用程序中使用 EF6,因此我们为业务对象创建了一个抽象类
所以,我们有一个通用抽象类,如下所示:

public abstract class Repository<TEntity, TIdentifier> : IRepository<TEntity, TIdentifier> where TEntity : class { ... }

在我们的应用程序中,BusinessLayer我们有几个实现上述类的类(每个实体一个类)。
eg:如下

    //Authorization is an entity here
    public class AuthorizationBusinessObject : MD.EntityFramework.Repository.Repository<Authorization, int>
    {
       ...
    }

我们需要有一个BaseBusinessObject以上的类。
现在,我的问题就在这里;我们如何才能BaseBusinessObject为上述课程开设课程?

编辑 :

好吧,Repository<>是 的基类BusinessObjects,不是吗?
实际上,我们需要一个非泛型基类来解释BusinessObjects
为什么?
我们在 MVC 4 应用程序中使用 Web API 服务。在每个 web api 控制器中,我们必须具有与以下相同的操作,只是BusinessObject不同。因此,如果我们可以有一个基础业务对象,我们可以在基础 web api 控制器中实现以下操作。

// Setting is an Entity
private readonly SettingBusinessObject _settingBusinessObject;

public SettingController()
{
    _settingBusinessObject = new SettingBusinessObject(Entities);
}

public Setting Get(int id)
{
    return _settingBusinessObject.SelectBy(id);
}
public List<Setting> Get(IEnumerable<int> ids)
{
    return _settingBusinessObject.SelectAll(ids).ToList();
}

public Setting Put(Setting setting)
{
    return _settingBusinessObject.Update(setting);
}
public List<Setting> Put(List<Setting> entities)
{
    List<Setting> userList = new List<Setting>();
    userList.AddRange(entities.Select(_settingBusinessObject.Update));
    return userList;
}

public Setting Post(Setting entity)
{
    return _settingBusinessObject.Insert(entity);
}
public List<Setting> Post(List<Setting> entities)
{
    List<Setting> userList = new List<Setting>();
    userList.AddRange(entities.Select(_settingBusinessObject.Insert));
    return userList;
}

public void Delete(int id)
{
    _settingBusinessObject.Delete(id);
}
public void Delete(List<int> ids)
{
    _settingBusinessObject.Delete(ids);
}
4

1 回答 1

6

为什么 BaseBusinessObject 类也不能是泛型的?

public abstract class BaseBusinessObject<TEntity, TIdentifier> : Repository<TEntity, TIdentifier>
{
    ... base stuff here
}

public class AuthorizationBusinessObject : BaseBusinessObject<Authorization, int>
{
}

不过,值得注意的是,在 EF 之上分层大量每个实体的东西可能会增加大量样板文件,但几乎没有真正的好处。考虑直接使用 EF 是否可以满足您的需要,或者您的业务对象类是否应该围绕逻辑操作集而不是围绕单个实体进行组织,这可能是值得考虑的。

于 2013-11-29T19:43:07.367 回答