首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC: BLL和DAL到仓库设计

问ASP.NET MVC: BLL和DAL到仓库设计
EN

Stack Overflow用户
提问于 2011-02-08 13:16:16
回答 2查看 5.8K关注 0票数 4

我们正在从ASP.NET Web转移到MVC2.0。在我们的大多数项目中,我们都有一个与数据库通信的典型设置。

通用(对象/实体,如“SiteMenu”和“用户”)

业务逻辑层(调用de数据访问层)

数据访问层

DAL有一个具有公共数据库操作的DatabaseHelper、一个具有数据库特定操作的OdbcHelper (例如MySQL)和一个包含所有存储过程的StoredProcedure类。

如何将此设计转换为存储库设计?我们希望使用我们自己的数据库助手,而不是NHibernate等等。

你有什么建议?

EN

回答 2

Stack Overflow用户

发布于 2011-04-20 20:12:53

您可以使用每种数据访问技术来利用存储库。存储库对现有的数据访问助手/服务进行抽象,允许业务逻辑与数据访问层分离。存储库与查询一起使用,以启用筛选。它经常与工作单元一起使用,以将更改存储回数据库。

存储库至少有:

  1. 按键获取对象操作
  2. 获取所有对象操作
  3. 获取第一对象的查询操作
  4. 按查询获取对象操作

一个非常简单的例子:):

A. 产品类,在公共中定义

代码语言:javascript
复制
public class Product
{
    public int Id { get; private set; }

    public string Code { get; set; }

    public string Name { get; set; }

    public decimal Price { get; set; }
}

B. DAL.interfaces.dll或Common.dll中定义了Query、IRepository和IUnitOfWork类(但DALE 230!)没有定义。

代码语言:javascript
复制
public class Query
{
    public string Text { get; set; }
}

public interface IRepository<TEntity>
    where TEntity : class
{
    bool TryGet(int key, out TEntity value);

    TEntity this[int key] { get; }

    IEnumerable<TEntity> GetAll();

    bool TryGetFirst(Query condition, out TEntity value);

    TEntity GetFirst(Query condition);

    IEnumerable<TEntity> GetAll(Query condition);

    int Count { get; }
}


public interface IUnitOfWork
{
    void SetAdded(TEntity value); // Marks entity as added for further INSERT

    void SetRemoved(TEntity value); // Marks entity as removed for further DELETE

    void SetChanged(TEntity value); // Marks entity as modified for further UPDATE

    void Save(); // Save all the changes 
}

IUnitOfWork知道更改的实体。Save()为每个更改的实体调用适当的DatabaseHelper / OdbcHelper CRUD方法,以便将更改持久化到数据库中。

IRepository的实现。IRepository和IUnitOFWork应放置在DAL中。然后,BLL使用IRepository和IUnitOFWork来实现业务(域)逻辑。BLL本身可以组织为服务层,位于域模型的顶部,但它超出了讨论的范围:)。

我希望我的回答能帮上忙。

请随便问我一个问题..。

链接:Martin的企业应用体系结构模式

票数 3
EN

Stack Overflow用户

发布于 2011-02-08 13:24:11

在迁移到MVC时,您可以维护相同的分层方法。返回实体/对象的BLL可以是MVC中的M。您通常会在示例中看到,人们直接在Controller中创建存储库实例,在您的示例中,您将创建BLL类的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4933483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档