DAO数据访问对象是.NET中常用的模式吗?我一直使用DAO作为提供访问我的数据层的方法.例如,我可能在我的EntityFramework ObjectContext上有一个瘦接口,将我的所有ObjectSet暴露为IObjectSet.
然后,DAO将公开复杂查询,每个DAO都依赖于此接口.我可能有一个ProductDAO暴露像GetProductsOnSale()或的方法GetInfrequenlySoldProducts().然后我的控制器或演示者将使用这些方法,这些方法可能是虚拟的,以允许对单元测试的特定结果进行存根.
这是.NET中常用的习惯用法吗?出于某种原因,我在线使用此模式看到的绝大多数示例都基于Java.甚至 关于DAO最佳实践的这个问题也被标记为Java而不是C#.
使用来自其他社区的东西没有任何问题,我只是有点担心我身边的每个人都在以不同的方式做事......
我对网上发现的一个例子有点困惑 - spring和hibernate(指向4. Model & BO & DAO).有Model,DAO和BO类(+ DAO和BO接口).我不清楚的是,如果DAO和BO分享完全相同的功能,那么为什么DAO和BO被分成不同的类(唯一不同的是BO有一个DAO设置器).
作者只解释了这种模式:
有助于清楚地识别图层,以避免弄乱项目结构
但它似乎过度设计了我(至少在这种情况下).我知道这个例子很简单,但是这个类的分离对什么有用呢?有人能提供一个例子吗?
最近我学习了ORM(对象关系映射)和3层架构风格(表示,业务和数据持久性).如果我理解正确,我可以将数据持久层分成DTO和DAO层.
我想了解,以下部分如何在数据持久层中一起工作.
最重要的是,我了解到了这一点
在较大的应用程序中,MVC是仅N层架构的表示层.
我真的很困惑,例如在3层架构风格中它是如何可能的,其中MVC只是一个表示层,而DTO,DAO,DAL只是数据持久层的一部分.我完全迷失了.
如果有人告诉我它是如何一起工作的真相,我会很高兴的.
请不要关闭这个问题,因为有许多不同的表达方式,我看到它到处都是这些东西基本上在大型应用程序中相互关联,我无法想象它是如何工作的.
我很感激任何答案!
以本文中JpaDao定义的类的非常具体的示例为例:
public abstract class JpaDao<K, E> implements Dao<K, E> {
protected Class<E> entityClass;
@PersistenceContext
protected EntityManager entityManager;
public JpaDao() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
}
public void persist(E entity) { entityManager.persist(entity); }
public void remove(E entity) { entityManager.remove(entity); }
public E findById(K id) { return entityManager.find(entityClass, id); }
}
Run Code Online (Sandbox Code Playgroud)
最好是为应用程序中的所有现有实体(Order,CustomerBook等)编写单元测试,还是只为一个实体编写单元测试是可以接受的,正如另一个问题所暗示的那样?有关使用泛型的单元测试java类的最佳实践吗?
使用带有dao Pattern的ContentProvider是正确的.?或者它会带来任何性能问题?
我会尽力解释.我有一个contentProvider.一个活动,一个道和一个豆..
这是代码:
class Bean(){
String name;
}
class Dao{
Activity activity;
public Dao(Activity activity){
this.activity = activity;
public List<Bean> getAllBean() {
Cursor c = activity.managedQuery(Bean.CONTENT_URI, PROJECTION,
null, null, Bean.DEFAULT_SORT_ORDER);
return BeanMapper.GetAllFromCursor(c);
}
}
}
Class Activity{
.....
onCreate(....){
Dao dao = new Dao(this);
List<Bean> aList = dao.getAllBean();
}
....}
Run Code Online (Sandbox Code Playgroud)
你怎么看 ?
问候
我有需要为客户和客户地址更新数据库的组件(通过JDBC).从CustomerDAO调用CustomerAddressDAO是否合适?或者创建一个单独调用它们的"CustomerDataManager"组件?
我一直在阅读一些教程,我可以看到大多数MVC实现
基于:
1)dao接口,例如"IUserDao"
2)该接口的dao impl - "mySimpleUserDaoImpl"
3)持久性的服务接口:"IUserService"
4)和一个impl - "UserServiceImpl"
这是最好的做法吗?我的意思是我问这个问题的原因是因为使用getXById(),deleteX(x),createX(x)方法提供30个服务看起来多余或多或少相同似乎是多余的.
请考虑到我正在使用spring 3和hibernate 4,我决定在开始用代码猛击我的键盘之前我会问这个问题
谢谢.
请你解释一下以下数据库代表之间的区别,比如PHP:
ORM DAO DataMapper ActiveRecord TableGateway
任何例子将不胜感激.
我正在重写一个大网站,需要非常扎实的架构,这里是我的几个问题,请原谅我混合苹果和橙子,也许还有奇异果:)我做了很多研究,最后完全糊涂了.
主要问题:您将采用哪种方法来构建一个预计会以各种方式增长的大型网站?
单个入口点,数据库中的页面数据,通过将GET变量与数据库条目相关联来拉出(?pageid = whatever)
单个入口点,页面数据在单独的文件中,包含基于GET变量(?pageid =包含whatever.php的任何内容)
MVC(好吧,伙计们,我都是为了这个,但是除了检查所有的教程和框架之外无法掌握这个概念,他们是否将"视图"存储在数据库中?从示例中可以看出,如果你有1000页相同的话它们可以由1个模型塑造,但我仍然需要1000个"视图"文件?)
PAC - 这对我来说听起来更合乎逻辑,但没有找到太多资源 - 如果这是一个好方法,你能推荐任何书籍或链接吗?
DAL/DAO/DDD - 在发布问题之前,我通过努力阅读堆栈溢出来了解这些术语.不确定它是否属于此列表
坐下来创建我自己的架构(如果没有人在这里启发我可能会这样做:)
没有提到的东西......
谢谢.
我是Hibernate的新手.
我正在尝试获取所有管理员的名字和姓氏列表.
我的以下代码中有两个警告.我已经尝试在线搜索了很多.
1)查询是原始类型.应该参数化对泛型类型Query的引用.
2)不推荐使用Query类型的方法list().
public List<Object> loadAllAdmins() {
List<Object> allAdmins = new ArrayList<Object>();
try {
HibernateUtil.beginTransaction();
Query q = currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin");
allAdmins= q.list();
HibernateUtil.commitTransaction();
} catch (HibernateException ex) {
System.out.println("List<AdminBean> loadAllPersons: HibernateException");
}
return allAdmins;
}
Run Code Online (Sandbox Code Playgroud)
但我在整个网络上都看到了这样的示例代码.我该如何解决这两个问题?
更新
我只是尝试按照建议使用Criteria.它还说,对于Criteria,list()方法是弃用的......看起来很多方法都被弃用了Query和Criteria,包括uniqueResult()和其他...任何建议我应该如何替换它们?