标签: data-access-layer

数据访问层:公开列表<>:坏主意?

我目前正在编写一个简单的数据访问层,我想知道我应该向其他层公开哪种类型.

我将在内部实现数据作为列表<>,但我记得在不需要的情况下阅读有关不向消费者公开List类型的内容.

public List<User> GetAllUsers() // non C# users: that means List of User :)
Run Code Online (Sandbox Code Playgroud)

你知道为什么(谷歌没有帮助)?你经常为那种东西揭露什么?IList的?IEnumerable的?

architecture ienumerable ilist data-access-layer list

3
推荐指数
1
解决办法
895
查看次数

在C#中构建对象的更好方法

我有一个我的对象类型的应用程序,它继承自包含应用程序对象的大多数属性的基类.所有对象类型都存储在数据库的一个表中."ClassType"列确定将SqlDataReader行转换为的对象类型.

这是我目前的实施:

SqlDataReader dr = SqlServerHelper.ExecuteReader("MyStoreProc", MySqlParmas);

if(dr.HasRows)
{
    while(dr.Read())
    {
        switch(dr["ClassType"].ToString())
        {
            case "ClassA":
                //cast sqldatareader a ClassA object
                ClassA a = new ClassFactory.CreateClassA(object p1, object p2);
            case "ClassB":
                //cast sqldatareader a ClassB object
                ClassB b = new ClassFactory.CreateClassB(object p1, object p2);
        //it continues for all objects with app....
        }
    }
}

dr.Close()
Run Code Online (Sandbox Code Playgroud)

我的问题是他们对这种处理有更好的实现吗?

c# data-access-layer

3
推荐指数
2
解决办法
690
查看次数

当它们看起来重叠时,分解业务逻辑和数据层的最佳设计?

我正在构建一个MVC Web应用程序(使用Spring MVC框架),我对设计特定区域的最佳方法感到有些困惑.

应用程序必须与一系列Web服务进行交互,这些Web服务并非真正设计得非常完美,并且本身并不提供很多抽象 - 基本上每个创建/更新/检索/删除操作都有一个Web服务方法.每个"数据类型",除此之外没有太多的API.Web服务客户端需要知道要调用哪些方法,以及能够以何种顺序创建所需的数据 - 换句话说,没有基于"事务"的方法.

例如,只需创建一个新的用户帐户,就需要调用总共七种不同的Web服务方法来设置必要表中的所有记录(user记录,privileges向该用户添加正确的billing内容,设置用户的详细信息等) .

我正在努力用最好的方法来抽象它并将其封装在我们的应用程序中.大多数应用程序遵循标准流程:

request ---> Controller <---> Service/Business-level object <---> DAOs for data access
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我使用自己的一组"域对象"来表示和抽象Web服务WSDL中定义的数据类型,这样我的域逻辑就不依赖于Web服务类型,因此我们可以抽象和隐藏我们喜欢哪个细节.

我正在寻找一些意见是设计上面提到的"用户创建过程"的最佳方法.创建"常规用户"的过程涉及调用七种不同的Web服务,如我所提到的,但这只是用户的一种"类型" - 我们必须能够创建几种不同类型的用户,每种用户需要不同的要调用的Web服务.

目前我只是设计了这个"常规用户"创建,作为一个概念证明 - 我有一个域对象User,一个UserDao接口,它有方法getUser(name)createUser(User),以及一个WebServiceUserDao实现UserDao方法并知道如何调用上述方法的接口 -提到了七种网络服务方法.该createUser()方法由a调用UserCreationService,它是我的业务/服务级别类,而后者又被调用SignupController.

但是要扩展这个逻辑以便能够创建不同的用户类型(由不同的值表示User.getType(),我不确定在业务/服务层类和DAO之间绘制线的位置.例如,我应该:

  1. UserDao每个"用户类型" 创建一个实现,因此创建每个"用户类型"的逻辑可以封装在它自己的类中,并让UserCreationService决定UserDao使用哪个?这将对应于1个服务类:许多DAO.
  2. 我是否应该UserDao分成小块,一个对应于需要在Web服务/ DB中创建的每个"记录",即使我的整个应用程序不需要知道这些单独类型中的每一个?然后UserCreationService针对各种不同的"用户类型" 进行不同的实现?换句话说,即使我不需要对应的或域对象,这个策略也会有a PrivilegesDao,a BillingPlanDao等.这将是许多服务类:许多DAO.PrivilegeBillingPlan
  3. 包含需要为单个中的每个"用户类型"调用Web服务的所有逻辑WebServiceUserDao?这将有一个非常复杂的类的缺点(PMD已经在抱怨圈复杂度),但所有这些逻辑都将封装在一个类中,从整体API角度来看可能会减少复杂性. …

java model-view-controller business-logic data-access-layer

3
推荐指数
1
解决办法
2860
查看次数

可重用的ObjectContext或新的ObjectContext用于每组操作?

我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理ObjectContexts.

这些通常是首选/推荐的:

这个

public class DataAccess{

    MyDbContext m_Context;

    public DataAccess(){
        m_Context = new MyDbContext();        
    }

    public IEnumerable<SomeItem> GetSomeItems(){
        return m_Context.SomeItems;
    }

    public void DeleteSomeItem(SomeItem item){
        m_Context.DeleteObject(item);
        m_Context.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

或这个?

public class DataAccess{

    public DataAccess(){ }

    public IEnumerable<SomeItem> GetSomeItems(){
        MyDbContext context = new DbContext();
        return context.SomeItems;
    }

    public void DeleteSomeItem(SomeItem item){
        MyDbContext context = new DbContext();
        context.DeleteObject(item);
        context.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities data-access-layer objectcontext

3
推荐指数
1
解决办法
5298
查看次数

ASP.Net分层应用程序 - 在层之间共享实体数据模型

如何在我的C#Web应用程序的所有层中共享自动生成的实体数据模型(生成的对象类),同时仅在数据层中授予查询访问权限?这使用典型的3层方法:数据,业务,演示.

我的数据层返回IEnumerable<T>到我的业务层,但是我不能将类型T返回到表示层,因为我不希望表示层知道数据层的存在 - 这是实体框架自动生成我的类的地方.

建议使用仅包含数据模型的单独层,但我不确定如何从实体框架提供的查询功能中分离数据模型.

asp.net entity-framework data-access-layer ado.net-entity-data-model

3
推荐指数
1
解决办法
1758
查看次数

是否有我可以用于我正在构建的应用程序的现有数据层?

我正在编写一个.NET应用程序,从头开始实现数据层的想法对我来说很蠢.(数据层我指的是与数据库对话的代码,而不是将数据库访问抽象为域对象的层[有时称为数据访问层,可与数据层互换使用].)

我想找到一个现有的通用数据层实现,它提供标准的crud功能,错误处理,连接管理 - 工作.我将只与SQL Server交谈.

如果库是在C#或VB.NET中,对我来说并不重要,我不在乎它是LINQ还是ADO.NET.只要它有效.

**我想强调一点,我不是在寻找数据访问技术或机制(例如LINQ,ORM工具等),而是寻找现有的库.)

.net c# sql-server data-access data-access-layer

3
推荐指数
1
解决办法
388
查看次数

CakePHP业务逻辑层

CakePHP似乎没有提到将应用程序的业务逻辑和数据访问层分开.这是我的第一个MVC应用程序,我的"胖模型"变得非常胖,因为它们包含各种业务逻辑,其唯一的共同点是需要访问同一个数据库.

当您听到将业务逻辑从控制器转移到模型中的建议时,最终是否可以接受这种状态?CakePHP是否为单独的业务逻辑层提供任何结构作为其框架的一部分?

谢谢,Brian

php cakephp business-logic-layer data-access-layer

3
推荐指数
1
解决办法
1130
查看次数

完整封装实体框架

我正在使用WPF作为表示层(当然还有MVVM)开发一系列业务应用程序.我正在使用Ado.Net Entity Framework来映射DataBase.我不想直接在代码中使用实体(在业务层中).我想分离我的图层: - 表示层 - 业务层 - 数据访问层

根据这篇文章 http://www.wadewegner.com/2009/06/architecting-your-data-access-layer-with-the-entity-framework/ 我想实现实体框架的完全封装.提供关注点分离,并在将来不依赖于EF作为ORM

你可以通过给我一些例子来封装EF以及如何在代码中实现它来帮助我.谢谢

entity-framework data-access-layer separation-of-concerns

3
推荐指数
1
解决办法
2355
查看次数

亚音速死了吗?

我工作的公司几乎使用亚音速 DAL 来完成我们所做的一切。

我最近注意到该已被释放。

那么亚音速死了吗?

subsonic data-access-layer

3
推荐指数
1
解决办法
2014
查看次数

为什么 DNN 中 DAL2 存储库的默认 GetById() 执行缓慢?

我遇到了一个问题,即 DAL2 存储库的默认 Get() 函数需要几秒钟才能返回结果。当我使用 SQL Server Management Studio 直接查询数据库以获取记录时,查询会快速返回。该函数是一个基本函数,如下所示:

public MyThing Get(string primaryKey)
{
    MyThing myThing;
    using (IDataContext ctx = DataContext.Instance(“DATABASECONN”))
    {
        var rep = ctx.GetRepository<MyThing>();
        myThing = rep.GetById(primaryKey);
    }
    return myThing;
}
Run Code Online (Sandbox Code Playgroud)

该表有 800K+ 条目。

即使启用了缓存设置,该函数在后续执行中也具有相同的执行时间。

为什么这个功能运行缓慢,我该如何加快速度?

sql dotnetnuke data-access-layer dotnetnuke-7

3
推荐指数
1
解决办法
579
查看次数