'存储库'和'商务层'之间的混淆

时间:2018-05-06 09:22:52

标签: repository-pattern

这是一个虚拟项目,主要是我想关注'分层架构'。我从其他地方跟踪了这个架构。在这里,我想从数据库中带一些“发布”。所以这是我的存储库:

public class PostRepo
{
    private DataAccessLayer.DBPost _DbPostInstance = null;
    public List<ModelLayer.PostModel> ListOfPosts = null;
    public PostRepo()
    {
        _DbPostInstance = new DBPost();
    }
    public List<ModelLayer.PostModel> GetListOfPost()
    {
        DataTable dtPost = _DbPostInstance.GetPostDataTable();
        foreach (DataRow dr in dtPost.Rows)
        {
            ModelLayer.PostModel postModel = new PostModel();
            postModel.id = (int)dr[0];
            postModel.postTitle = (string)dr[1];
            postModel.postBody = (string)dr[2];

            ListOfPosts.Add(postModel);
        }

        return ListOfPosts;
    }
}

这就是我的商务层:

class PostBiz
{
    private RepositoryLayer.PostRepo _postRepo;

    public PostBiz()
    {
        _postRepo = new RepositoryLayer.PostRepo();
    }

    public List<ModelLayer.PostModel> GetListOfPost()
    {
        return _postRepo.GetListOfPost();
    }
}

现在我的问题是:

  1. 我完全错了吗?
  2. 如果我的手术没问题,那我为什么这样做呢? “业务层”的主要目的和作用是什么?通过创建此类业务层,我将获得哪些优势?

1 个答案:

答案 0 :(得分:1)

我不确定其他语言的最佳做法是什么,但在PHP中我使用了很多Action Domain Responder Modeling作为架构。这样,数据库就可以100%抽象出我的控制器和视图逻辑。它看起来有点像你描述的那样。

每当我想要添加基于业务逻辑的cli脚本或API时,我都会使用域而不是数据库。这样你就不会重复自己,你可以专注于业务逻辑,而不是如何显示或处理输入和输出。

在一个呈现html的控制器中,我只专注于请求和响应。其余的被抽象掉了。 在CLI脚本中,我再次关注输入和输出并调用相同的业务逻辑。 在API中,我再次关注输入和输出并调用相同的业务逻辑。

这样,每当业务逻辑发生变化时,所有3个端点(html,api和cli)都会被覆盖。