我目前正在编写一个简单的数据访问层,我想知道我应该向其他层公开哪种类型.
我将在内部实现数据作为列表<>,但我记得在不需要的情况下阅读有关不向消费者公开List类型的内容.
public List<User> GetAllUsers() // non C# users: that means List of User :)
Run Code Online (Sandbox Code Playgroud)
你知道为什么(谷歌没有帮助)?你经常为那种东西揭露什么?IList的?IEnumerable的?
我有一个我的对象类型的应用程序,它继承自包含应用程序对象的大多数属性的基类.所有对象类型都存储在数据库的一个表中."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)
我的问题是他们对这种处理有更好的实现吗?
我正在构建一个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之间绘制线的位置.例如,我应该:
UserDao每个"用户类型" 创建一个实现,因此创建每个"用户类型"的逻辑可以封装在它自己的类中,并让UserCreationService决定UserDao使用哪个?这将对应于1个服务类:许多DAO.UserDao分成小块,一个对应于需要在Web服务/ DB中创建的每个"记录",即使我的整个应用程序不需要知道这些单独类型中的每一个?然后UserCreationService针对各种不同的"用户类型" 进行不同的实现?换句话说,即使我不需要对应的或域对象,这个策略也会有a PrivilegesDao,a BillingPlanDao等.这将是许多服务类:许多DAO.PrivilegeBillingPlanWebServiceUserDao?这将有一个非常复杂的类的缺点(PMD已经在抱怨圈复杂度),但所有这些逻辑都将封装在一个类中,从整体API角度来看可能会减少复杂性. …我是实体框架的新手,我刚开始在空闲时间玩它.我遇到的一个主要问题是如何处理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#Web应用程序的所有层中共享自动生成的实体数据模型(生成的对象类),同时仅在数据层中授予查询访问权限?这使用典型的3层方法:数据,业务,演示.
我的数据层返回IEnumerable<T>到我的业务层,但是我不能将类型T返回到表示层,因为我不希望表示层知道数据层的存在 - 这是实体框架自动生成我的类的地方.
建议使用仅包含数据模型的单独层,但我不确定如何从实体框架提供的查询功能中分离数据模型.
asp.net entity-framework data-access-layer ado.net-entity-data-model
我正在编写一个.NET应用程序,从头开始实现数据层的想法对我来说很蠢.(数据层我指的是与数据库对话的代码,而不是将数据库访问抽象为域对象的层[有时称为数据访问层,可与数据层互换使用].)
我想找到一个现有的通用数据层实现,它提供标准的crud功能,错误处理,连接管理 - 工作.我将只与SQL Server交谈.
如果库是在C#或VB.NET中,对我来说并不重要,我不在乎它是LINQ还是ADO.NET.只要它有效.
**我想强调一点,我不是在寻找数据访问技术或机制(例如LINQ,ORM工具等),而是寻找现有的库.)
CakePHP似乎没有提到将应用程序的业务逻辑和数据访问层分开.这是我的第一个MVC应用程序,我的"胖模型"变得非常胖,因为它们包含各种业务逻辑,其唯一的共同点是需要访问同一个数据库.
当您听到将业务逻辑从控制器转移到模型中的建议时,最终是否可以接受这种状态?CakePHP是否为单独的业务逻辑层提供任何结构作为其框架的一部分?
谢谢,Brian
我正在使用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以及如何在代码中实现它来帮助我.谢谢
我遇到了一个问题,即 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+ 条目。
即使启用了缓存设置,该函数在后续执行中也具有相同的执行时间。
为什么这个功能运行缓慢,我该如何加快速度?
c# ×3
.net ×1
architecture ×1
asp.net ×1
cakephp ×1
data-access ×1
dotnetnuke ×1
dotnetnuke-7 ×1
ienumerable ×1
ilist ×1
java ×1
list ×1
php ×1
sql ×1
sql-server ×1
subsonic ×1