gpt4 book ai didi

asp.net-mvc - ASP.NET MVC : BLL and DAL to Repository design

转载 作者:行者123 更新时间:2023-12-01 01:30:55 25 4
gpt4 key购买 nike

我们正在从 ASP.NET Web 窗体迁移到 MVC 2.0。在我们的大多数项目中,我们都有一个典型的设置来与数据库进行通信。

普通 (像“SiteMenu”和“Users”这样的对象/实体)

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

数据访问层

DAL 有一个带有通用数据库操作的 DatabaseHelper,一个带有数据库特定操作(例如 MySQL)的 OdbcHelper 和一个带有所有存储过程的 StoredProcedure 类。

这种设计如何转化为存储库设计?我们想使用我们自己的数据库助手而不是 NHibernate 等。

你有什么建议?

最佳答案

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

一个存储库至少有:

  • 按键获取对象操作
  • 获取所有对象操作
  • 按查询获取第一个对象的操作
  • 按查询获取对象操作

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

    A. 产品 类,定义于 普通 :
    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. 的类(class)查询 , IRepository IUnitOfWork 中定义DAL.interfaces.dll Common.dll (但不在 DAL 中!)。
    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 知道已更改的实体。 保存() 为每个更改的实体调用适当的 DatabaseHelper/OdbcHelper CRUD 方法,以便将更改保留在数据库中。

    的实现IRepository , ... IRepository IUnitOFWork 应该放在 DAL 中。然后 BLL 使用 IRepository IUnitOFWork 为了实现业务(领域)逻辑。 BLL 本身可以组织为 服务层顶部 域模型 ,但这不在讨论范围内:)。

    希望我的回答有帮助。

    请随时问我一个问题...

    链接:
    Patterns of enterpise application architecture by Martin Fowler

    关于asp.net-mvc - ASP.NET MVC : BLL and DAL to Repository design,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4933483/

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