应用场景
public class Car { private final int seet; private final String engine; private final int dormer; private final int speed; private final int color; public static class Builder{ private int seet; private String engine; // Optional parameters private int dormer; private int speed; private int color; public Builder(int seet, String engine){ this.seet = seet; this.engine = engine; } public Builder dormer(int val){ this.dormer = val; return this; } public Builder speed(int val){ this.speed = val; return this; } public Builder color(int val){ this.color = val; return this; } public Car build(){ return new Car(this); } }; private Car(Builder builder){ this.seet = builder.seet; this.engine = builder.engine; this.dormer = builder.dormer; this.speed = builder.speed; this.color = builder.color; } }
public class Main { public static void main(String[] args) { Car car1 = new Car.Builder(4, "power").dormer(1).speed(1000).color(255).build(); Car car2 = new Car.Builder(2, "awesome").speed(2000).color(122).build(); } }
三层体系结构,是在客户端与数据库之间加上了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,是源自并优化了经典体系模式MVC模式的产物,即使这三个层放置到一台机器上。三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互换。
二.组成 1、界面表示层(USL):主要是指与用户交互的界面,用于显示数据和接收用户输入的数据,将用户输入的数据传递给业务逻辑层,一般不包含任何实际的业务处理,当业务逻辑的数据发生变化时,表示层就会显示出更新的结果。表示层提供应用程序的用户界面,通常为Windows应用程序或web应用程序。
2、业务逻辑层(BLL):是表示层和数据访问层之间的桥梁,它代表应用程序的核心功能,负责处理数据层的数据,实现业务逻辑。业务逻辑层通常为类库。
3、数据访问层(DAL):主要实现对数据的保存和读取操作,将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库中。数据访问层可以访问关系数据库、文本文件或者XML文档,通常为类库。
三.模型理解三层结构开发的软件系统和饭店经营的模式类似
1、表示层就像饭店的服务员,直接和客户打交道,提供软件系统与用户交互的接口;
2、业务逻辑层是表示层和数据访问层之间的桥梁,负责数据处理和传递,就像饭店里的厨师,负责把采购回来的材料加工完成,传递给服务员;
3、数据访问层只负责数据的存取工作,就像饭店的采购,系统里有什么数据取决于数据访问层的工作,就像饭店能够提供什么样的饭菜首先取决于采购购买的材料。
四.作用1、安全性高。用户端只能通过逻辑层访问数据层,减少了入口点,把很多危险的系统功能都给屏蔽了;
2、扩展性强。不同层负责不同的层面,如PetShop可经过简单的配置实现Sqlserver和Oracle之间的转换;
3、项目结构清楚,分工明确,有利于呼气的维护和升级;
4、可以很容易的用新的实现来替换原有层次的实现;
5、开发人员可以只关注整个结构中的其中某一层;
6、可以降低曾与层之间的依赖。使耦合度降低;
7、有利于各层逻辑的复用;
8、有利于标准化
五.劣势1、降低了系统的性能:如果不采用分层结构,很多业务可以直接造访数据库,一次获取相应的数据,如今必须通过中间层完成;
2、有时候导致级联的修改。这种修改预期体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分成式结构,可能需要在相应的业务逻辑成和数据访问层中都增加相应的代码;
3、执行速度不够快。当然这个“执行速度”是相对与非分层的应用程序来说的
因此。“三层结构”开发不适用对执行速度要求过于苛刻的系统,如:在线订票,在线支付等。它比较擅长商业股则容易变化的程序。
4、增加了代码量,增加了工作量。
六.构建下面我们就采用C#语言构建三层的框架:
1、表示层:文件→新建项目→VisualC# →Windows窗体应用程序
2、业务逻辑层:
文件→添加项目→VisualC#→类库
3、数据访问层:
文件→添加项目→VisualC#→类库
4、添加实体
文件→添加→新建项目→VisualC#→类库
5、添加表示层引用:选中LoginUI项目→右键选择“添加引用”→“LoginBll”项目和“LoginModle”项目
6、添加业务逻辑层引用:
选中LoginBll项目→右键选择“添加引用”→“LoginModel”项目和“LoginDAL”项目
7、添加数据访问层引用:
选中LoginDAL项目→右键选择“添加引用”→“LoginModel”项目
把各项目之间的引用关系建立好以后,一个完整的解决方案就算是拾建好基石了。
七.总结不要因为某个层对你来说没用,或者实现起来特别简单,就认为它没有必要,或者摒弃它,或者挪作它用。只要进行了分层,不管是几层,每一层都要有明确的目的和功能实现,而不要被实际过程所左右,造成同一类文件位于不同层的情况发生。也不要出现同一层实现了不同的功能的情况发生。
一、Servlet的配置包含在web.xml文件中,主要通过以下两步进行设置。
(1)声明Servlet对象
<servlet>
<servlet-name>Servlet的名称</servlet-name>
<servlet-class>指定Servlet对象的完整对象</servlet-class>
</servlet>
(2)映射Servlet
<servlet-mapping>
<servlet-name>Servlet的名称</servlet-name>
<url-pattern>映射访问URL</url-pattern>
</servlet-mapping>
注:两处的Servlet可以任意取但必须保持一致
二、Servlet过滤器配置
(1)声明ServletFilter对象
<filter>
<filter-name>过滤器的名称</filter-name>
<filter-class>过滤器的完整类名</filter-class>
</filter>
(2)过滤器映射
<filter-mapping>
<filter-name>过滤器名称</filter-name>
<url-pattern>过滤器映射</url-pattern>
</filter-mapping>
注:两处的过滤器名称t可以任意取但必须保持一致