DRP分层渐变 (精)

DRP分层渐变 (精)

DRP视频看完了,在学习的过程中对分层又有了新的认识,并且老师对分层是一种循序渐进的讲解方式。每一步前进一点,逐步解耦。下面整体上回忆一下在DRP中的分层渐变。

Model1

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)

这个版本的分层是直接用JSP调用业务逻辑层,完成业务处理和数据库操作。耦合性非常高,修改和维护是一件非常困难的事情,适合于快速开发,容易理解,编码简单。



Model1+Dao设计模式

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)

这一个分层主要是在Model1的基础上又用了一个Dao设计模式,通过Dao层把数据库操作封装起来,进一步降低了业务逻辑层的耦合性。其实这就是三层架构。适合团队开发分工划分,这样分层让每一层的职责划分更加明确,虽然这样分层在一定程度上降低了耦合度,但是我们可以知道上层是知道下一层的实现的,从这样个角度来说耦合度在一定程度上还是比较高的。


Model2

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)

这样分层就是Java中的Model2。主要在上一版本的基础上添加了一层控制,主要是由Servlet来负责。添加了这层控制层之后让JSP的职责更加单一,只负责显示数据,一些业务控制拿到了控制层。这样让职责更加明确。但是JSP中依旧会出现Java代码,所以这样就要求做界面的开发者要了解Java代码。

Model2+简单工厂

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)

这个分层首先是在DAO层抽象了一个DAO的接口,并且在业务逻辑层和DAO层添加了一个简单工厂。

简单工厂的作用就是隐藏DAO实现的细节,让业务逻辑层直接触的是接口,具体实现看不见。这样就能把业务逻辑层和DAO层解耦,可以应对数据库更换的变化。这样一分层会让程序的复杂度加大。

还有一点就是如果现在更改数据库之后,工厂中实例化的代码是需要更改的,所以这样分层的耦合性依旧是比较高。

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)


---------------------此类图进一步加深简单工厂理解--------------------------

Model2+工厂方法

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)


这一个分层的好处依旧是降低业务逻辑层和DAO层的耦合性,依旧和简单工厂一样隐藏了产品的创建细节,并且原先的简单工厂的分层是在工厂中有必要的逻辑判断,简单工厂根据业务逻辑层选择条件动态实例化相关的类,而工厂方法是把工厂中的逻辑判断移动到了业务逻辑层中,这样工厂不再进行判断,逻辑业务层根据业务来选择工厂进行类的实例化。

这样如果更换数据库,我们原先是更改工厂,现在变成更改业务逻辑层了。

这样分层让程序的复杂性进一步加大,让类变得更加多。

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)


---------------------此类图进一步加深工厂方法理解--------------------------


Model2+单层抽象工厂

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)


这一分层是用抽象工厂来进行解耦的,主要是在业务逻辑层和DAO层中添加了一层抽象工厂,抽象工厂可以完成多产品系列的创建。使用抽象工厂我们发现业务逻辑层通过抽象接口操作示例的,具体的产品类名是不会在出现的,这样耦合性就降低了,如果用上反射和配置文件的话,假如更改数据库的话只需更改一下配置文件即可完成数据库更改。

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)


---------------------此类图进一步加深工厂方法理解--------------------------

Model2+双层抽象工厂

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)

受到上一层的影响,在控制层和业务逻辑层中也加了一层抽象工厂,用处同上。耦合度进一步降低。

*但是这样依赖抽象工厂会实例化很多类,调用一次实例化一次。可以在服务器端在加入一层抽象的Servlet层(在这里就不画图了),这一层主要就是实例化抽象工厂的,当服务器已启动就实例化工厂类。这样就避免了多次实例化工厂类。*

Model2+JSTL+双层抽象工厂

-----------------------------------------------

www.zeeklog.com  - DRP分层渐变 (精)

这一层主要是在界面上作了改变,主要就是用到了JSTL技术,这种技术主要让界面的JSP中不再出现Java代码,用了JSTL技术JSP编程了纯标签的,这一变化就让JSP的职责更加单一,即只显示数据。


总结

-----------------------------------------------

通过这个DRP的分层演变,对分层有了进一步认识,其实学习这个分层演变主要还是学会在什么场合用什么样的分层架构。在这个演变中首先学会几种分层,在以后的实战型目中认真分析需求选择合理的分层架构才是王道。

转自:  mvc分成结构演变

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk