通用类的基类?

 洗个小枣_312 发布于 2023-02-13 18:35

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

public abstract class Repository : IRepository where TEntity : class { ... }

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

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

我们需要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 Get(IEnumerable ids)
{
    return _settingBusinessObject.SelectAll(ids).ToList();
}

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

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

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

ChaseMedalli.. 6

为什么BaseBusinessObject类也不能通用?

public abstract class BaseBusinessObject : Repository
{
    ... base stuff here
}

public class AuthorizationBusinessObject : BaseBusinessObject
{
}

值得注意的是,在EF之上分层大量的每个实体的东西可以增加大量的样板,几乎没有什么实际好处.考虑是否直接使用EF可以获得您所需要的内容,或者您​​的业务对象类是应该围绕逻辑操作集而不是围绕单个实体进行组织,这可能会很糟糕.

1 个回答
  • 为什么BaseBusinessObject类也不能通用?

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

    值得注意的是,在EF之上分层大量的每个实体的东西可以增加大量的样板,几乎没有什么实际好处.考虑是否直接使用EF可以获得您所需要的内容,或者您​​的业务对象类是应该围绕逻辑操作集而不是围绕单个实体进行组织,这可能会很糟糕.

    2023-02-13 18:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有