深入的了解面向对象编程
所谓面向对象变成,相信大家都知道,但我们在写代码是否有这样做呢?比如在实际项目中,我们会对数据库进行一些操作,如果我们对面向对象了解的不够深,就很有可能会局限于以数据库为中心的思路进行编程。拿数据库和实体类来说,它们分别对应物理模型和类图模型,而且之间应该是可以互相转换的,之前我一般会先设计好物理模型生成SQL语句创建数据库,然后在转换生成实体类。而使用Hibernate这个ORM框架,建好实体类后可反向创建数据库表,更精彩的是Java里可以使用注解来标识实体类或属性对应的数据库表或列,通过Spring接管代理后,通过XML配置可在初始化时把实体类同步到数据库表结构,甚至可根据实体对象的关系(如一对多、多对多)自动生成主外建关系,自动创建数据库。
Hibernate实体类(包含ManyToOne和ManyToMany关系,使用@代码注解代替繁杂的XML配置)
面向接口编程,依赖注入接口的实例
所谓接口,旨在提供一种约束规范,它要求实现类必须实现接口内所有方法或属性。我们常说的提供一个接口,但其实是提供一个接口的实例,只不过应该是以接口形式返回的,接口类里只有方法或属性的申明,所以我们不必要关注里面的实现,这样可促进各模块的松耦合。Spring里有一种称作控制反转(IOC)的技术,其中很多的地方就是使用接口,先通过容器配置管理一个bean实例(一般为singleton模式),然后再使用set方法或构造函数进行注入实例。
三层架构表现层(MVC)、业务逻辑层、持久层
传统的三层应该是表现层、业务逻辑层、持久层,根据项目需求的不同可能层次会更细分,但一般应该保证有这三层的明确分工,如下图:
但这里应该跟MVC三层区分开来,因为MVC应该是表现层一层,拿Struts来说,M(Model)应该是Action Form,V(View)应该是jsp页面,C(Control)应该是Struts Action。而如果使用Spring框架的话,当然也可以把Struts整合在一起,但Spring本身有提供DispatcherServlet控制分发器,可以直接把请求交给指定类处理,并可以根据不同URL参数响应不同方法,加上可以使用@代码注解,所以很方便实用。Spring同时还能整合Hibernate,构成目前JavaWeb开发领域最流行的框架SSH,Spring在其中冲当着控制管理的核心作用,详细流程如下图所示:
相比Java,.Net则是本身提供了一个强大的平台,在表现层,aspx页面则是属于View,aspx.cs相当于每个页面的控制层Control,依赖于.Net里强大的服务器控件,很容易在cs里控制aspx页面输出的内容,一般直接可以很方便通过控件ID获取值,因此View在到Control层前很少对Model进行填充转换,不过到持久化写入数据库还是依赖Model实体,因此Model层转换还是必须的,但目前我还没有用过.Net自动转换Model层的框架