领域模型与数据映射器(理解)

领域模型根据业务逻辑编写,以及生成对象(对象安全,与数据层分离)

处理业务逻辑,根据业务逻辑编写,如果每个类与数据表相对应是最好不过,但是现实生产并不是这样.   主要功能是这样,如公交站会有很多公交车(公交车也是一个对象,它可能拥有乘客)以及车站的基本信息(名称等等),我们把车站声明为一个领域对象,构造方法可以传入ID已经车站的基本信息,每一条基本信息拥有自己的set get 方法,这里还会拥有公交车的get set (公交车的领域对象)

数据层

数据映射器可以很好的完成数据库操作,好处在于领域模型可以更专注的处理业务逻辑,而不必过多的关心数据库的操作。

在数据映射器类中,编写可以用到的sql语句,已经增删改查方法的编写。添加方法:通过领域模型的set方法注入需要添加的字段(如为车站起一个名字),这是一个完整的车站,现在是时候把它写到数据库中了,我们实例化车站的数据映射器,向添加方法中传入刚刚实例的车站对象,在映射器中执行车站对象的get方法取得车站信息,然后执行sql来添加数据库,添加返回主键ID,可以把ID存在领域对象中,以便之后对该对象的更新删除查找操作,更新操作同添加。查找,我们或许会从$_REQUEST中拿到想要查找的ID,首先,实例化映射器,传入ID,然后执行映射器查找方法,将查找到的信息写入我们的领域对象中。我们应该在查找出数据的时候实例化我们需要的领域对象,如此,可以在映射器中添加实例化领域对象方法。

如上延伸,查找一跳数据,映射器可以很好的完成实例化领域模型,但是,更多的时候需要一次查找出十几条,甚至几百条数据,我们需要对每一条数据进行实例化领域操作,会造成性能的低下,改进实例化操作,iterator(迭代器)接口。

Iterator extends Traversable {

/* 方法 */

abstract public mixed current ( void )//返回当前元素

abstract public scalar key ( void )//返回当前元素的键

abstract public void next ( void )//向前移动到下一个元素

abstract public void rewind ( void )//返回到迭代器的第一个元素

abstract public boolean valid ( void )//检查当前位置是否有效

}

如上是php.net贴出来的iterator接口说明,整理一下我们需要的,我们可能一次查询处多条数据,每一条数据都需要实例为领域对象。我们来继承这个迭代器,对,有很多条数据,可以在继承迭代器的接口(命名为 abstract A)A 类的构造方法中传入我们查询出来的数组和对应的映射器,把这些分别放入私有变量中,想一下应该怎么改造这个A了,我们需要一个负责实例化领域和返回领域对象的方法(别忘了我们在构造方法中传入了数据映射器,映射器可以为我们实例化对象),OK,很明显了,我们需要使用映射器的来实例化领域对象,然后返回该领域对象,以供使用。这样做还有一个好处,持久化操作,我们甚至可以把他作为一个单例来使用,再添加一个增加领域对象的方法,于是所有的领域对象都静静地躺在内存里待命,可以拿来想要的一条,或者全部。对了,每一个对象都应该有自己的迭代器,这样更好,嗯。有个烦恼的问题,迭代器中可能有重复的数据,甚至是一些已经改过,但是内存中还未做修改,这回导致bug,甚至很难找到问题所在,嗯。。。。

ps:   20 公里来回骑行

  70 个45度俯卧撑(7*10)

  160 个108度屈腿卷腹(20*8)

  35 个90度蹲起

时间: 2024-08-02 05:55:15

领域模型与数据映射器(理解)的相关文章

PHP面向对象之领域模型+数据映射器

/* 这里要说明一下 因为本人比较懒 博客中相关文章的内容更多的是对<深入PHP面向对象.模式与实践>一书中代码的整理和简单注解方便自己日后复习和参考, 对相关内容感兴趣的初学的朋友建议请先阅读原文.此处的内容只能当成一种学习的补充和参考.谢谢! 因原书中领域模型+数据映射器的示例代码是连贯在一起的 所以这里就整理在一起了. 简单介绍一下我的看法,从数据库操作的角度看领域模型主要是操作数据表中的单条记录的而数据映射器是操作整个数据表的数据的. 按原文的解释数据映射器是一个负责将数据库数据映射到

.NET平台机器学习组件-Infer.NET(三) Learner API—数据映射与序列化

         所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 微软Infer.NET机器学习组件:http://www.cnblogs.com/asxinyu/p/4329742.html 关于本文档的说明 本文档基于Infer.NET 2.6对Infer.NET User Guide进行中文翻译,但进行了若干简化和提炼,按照原网站的思路进行,但不局限与其顺序. 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈

深入浅出MyBatis:「映射器」全了解

本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记. 上一篇总结了MyBatis的配置,详细说明了各个配置项,其中提到了映射器,它是MyBatis最强大的工具,也是使用最多的工具. 通过映射器,可以很容易的进行数据的增删改查操作,我们抽象下进行这些操作的关键点:传递查询参数.组装各种场景下的查询条件.关联查询.将查询结果映射为Java Bean对象或集合等.另外,可以通过延迟加载.缓存提高数据查询的性能. 本篇就按照这个思路进行总结,首先列举下映射器的主要元素,每个元素提供的配置

springmvc 前段控制器 处理器映射器 处理器适配器 视图视图解析器 配置

1. 前段控制器 新建项目在web.xml中配置前段控制器 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</pa

Spring映射器、适配器、解析器

1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映射器查找到的controller中的方法进行调用. 第一种:Controller适配 第二种:HttpRequestHandler适配 第三种:注解适配 不同的处理器,对应不同的适配器,但是所有适配器最终都返回ModelAndView对象,springmvc通过对ModelAnd

springmvc03 非注解和注解处理器映射器和适配器

1其它非注解处理器映射器和适配器 1.1BeanNameUrlHandlerMapping(映射器) 根据请求url(XXXX.action)匹配spring容器bean的 name 找到对应的bean(程序编写的Handler) 1.2SimpleUrlHandlerMapping(映射器) <!--简单url映射, 集中配置bean的id对应 的url --> <bean class="org.springframework.web.servlet.handler.Simp

04SpringMvc_映射器_BeanNameUrlHanderMapping

这篇文章我们讲的是映射器,映射器的作用是什么样的请求交给Action,如果我们没有在xml配置文件中进行配置,默认的就是BeanNameUrlHanderMapping. 我们讲一个案例增加用户的案例. 案例结构图如下: 对上面的案例结构进行说明: 1. UserAction.java是增加用户的Action. 2.SpringMvc_002.xml是对应这个案例的配置文件. 3.Spirngmvc.xml是总的配置文件. 4.index.jsp是项目默认的访问页面. 5.succss.jsp是

非注解的处理器适配器和处理器映射器

一.非注解的处理器映射器 1,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping 该bean 按照名称配置url,如下: <bean id="itemsController1" name="/queryItems_test.action" class="cn.itcast.ssm.controller.ItemsController1" /> 2,org.

注解的处理器映射器和适配器

1, 配置注解映射器和适配器. <!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!--注解适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMa