- 浏览: 290100 次
- 性别:
- 来自: 兰州
文章分类
- 全部博客 (116)
- 给网友答疑 (1)
- J2EE (16)
- DesignPattern (14)
- OtherArchive (5)
- lucene and compass (1)
- JasperReport (2)
- FusionCharts (2)
- Classical algorithm (2)
- JS (5)
- ZK Ajax (1)
- ubuntu-linux (4)
- Weka (0)
- IDE Config (6)
- JAVA 底层 (3)
- C\C++ (4)
- Android (15)
- 项目展示 (1)
- 娱乐生活 (16)
- 电驴资源 (1)
- 网络转载 (1)
- 程序员 毛病 (1)
- Android,开发日志 (2)
- java (1)
- openGL es (2)
- MAC (1)
最新评论
-
洋葱pp奥特曼:
求大神再发一次资源,万分感激!!小弟邮箱:173992660@ ...
使用JQuery-Week-Calendar做日程 -
xbliu564:
请问版本号
fusionchart 破解文件SWF -
xue_lang:
看了半天,有点坑爹的赶脚,哎
状态模式(State) -
teacup_madman:
我只能说。这个程序可以去掉的地方太多了。这个真的是State模 ...
状态模式(State) -
冬日的阳光:
TrafficLight这个类的change方法可以改一下,如 ...
状态模式(State)
框架底层综合+快速开发+代码重用框架-设计(Service层)
框架底层综合+快速开发+代码重用框架-设计(Action层)
我们现在几乎都是基于SSH(SSJ)Web开发的,这样就需要我们设计一个快速的,代码可复用性强的高质量的代码,在这里介绍一种思路,和个人拙劣的实现!将会在此写一系列的相关文章。欢迎大家交流。
说明:
1、我们采用的Annotation的方式来配置需要的配置
2、持久层使用JPA的Hibernate实现。
3、控制层使用Struts2
4、搜索使用Compass
一、Model层设计
这一层是我们需要弄清楚业务逻辑层的主要属性和对象之间的映射关,个人的设计思路是,设计一个抽象类(abstract Model)让所有的实体对象都去继承(extends)这个抽象层。这个对象需要实现Serializable, Cloneable 这两个接口,因为我们要自爱queryAll()的时候使用到object.clone();这个方法。为了比较对象大小,我们还需要实现以下介个方法:
public boolean equals(Object obj); int hashCode(); String toString(); Model clone();
这个几个方法。
还有几个公共的属性:
1.id//数据库和对象的唯一标识。 2.modelAlias//别名查询 3.des//描述 4.porxy//代理标志 5.version//版本
等几个属性。代码参见如下:
package com.jxs.sys.core.base.model; import java.io.Serializable; import java.util.List; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import javax.persistence.OrderBy; import javax.persistence.Transient; import javax.persistence.Version; import javax.xml.bind.annotation.XmlAttribute; import org.compass.annotations.SearchableId; /** * * @TO Model 基础实体 * @des * @author BestUpon * @date Aug 15, 2010 11:54:32 AM * @version since 1.0 */ @MappedSuperclass public abstract class Model implements Serializable, Cloneable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @SearchableId @OrderBy("id") private Integer id; /** * 手否使用反射代理 */ @Transient private boolean proxy = false; /** * 对象的版本号,修改之后自增一;i++ */ @Version private Integer version; /** * 对象的别名,以便需要特殊的需要查询有中文问题的时候,使用他的别名查询可以准确的查询到结果 */ private String modelAlias; private String des; /** * 搜索字符串集合 * @return */ public List<String> getSearchProperties() { return null; } public Model clone() throws CloneNotSupportedException { return ((Model) super.clone()); } @XmlAttribute public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public boolean equals(Object obj) { if (obj == null) return false; if (this == obj) return true; if (!(obj instanceof Model)) return false; Model model = (Model) obj; return (model.getId() == getId()); } public int hashCode() { if (this.id == null) this.id = Integer.valueOf(-1); return new Integer(this.id.intValue() + 1000).hashCode(); } public String toString() { return getMetaData() + getId(); } public abstract String getMetaData(); public String getDes() { return des; } public void setDes(String des) { this.des = des; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public String getModelAlias() { return modelAlias; } public void setModelAlias(String modelAlias) { this.modelAlias = modelAlias; } public boolean isProxy() { return proxy; } public void setProxy(boolean isProxy) { this.proxy = isProxy; } }
getMetaData()是在Struts2中调用查看其对象,和toString()的时候调用比较方便。
实例代码:其他实体继承会有如下的代码:
package com.jxs.sys.copyweb.model; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import org.compass.annotations.Searchable; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.jxs.sys.core.base.model.Model; @Entity @Component("aboutus") @Scope("prototype") @Table(name = "jxs_sys_Aboutus") @Searchable(alias = "Aboutus") public class Aboutus extends Model { private static final long serialVersionUID = 7819540493825377389L; @Column(name = "_title_") private String title; @Column(name = "_content_") private String content; @Column(name = "_textDate_") private Date textDate; @Column(name = "_show_") private boolean show = true;// 是否显示 @Override public String getMetaData() { return "关于我们"; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getTextDate() { return textDate; } public void setTextDate(Date textDate) { this.textDate = textDate; } public boolean isShow() { return show; } public void setShow(boolean show) { this.show = show; } }
评论
13 楼
lxs647
2010-09-26
BestUpon 写道
pengzhoushuo 写道
1、我们采用的Annotation的方式来配置需要的配置
有点滥用Annotation了吧。不过Annotation的作用范围还有争议
有点滥用Annotation了吧。不过Annotation的作用范围还有争议
你说的也没错,没有对错之分,只有习惯与不习惯的区别~~~如不习惯,还是使用XML吧!
annotation的确是很方便、、、
但有些时候它也无能为力,这个时候就必须得要xml了、、、O(∩_∩)O~
12 楼
1927105
2010-09-21
额的神啊,J2EE好久没写了,最近在忙android
11 楼
suihr
2010-09-21
mark 慢慢看!
10 楼
myreligion
2010-09-20
做个小广告,我觉得您可以考虑基于guzz做。用Service可以解决掉很多问题。
9 楼
BestUpon
2010-09-20
pengzhoushuo 写道
1、我们采用的Annotation的方式来配置需要的配置
有点滥用Annotation了吧。不过Annotation的作用范围还有争议
有点滥用Annotation了吧。不过Annotation的作用范围还有争议
你说的也没错,没有对错之分,只有习惯与不习惯的区别~~~如不习惯,还是使用XML吧!
8 楼
pengzhoushuo
2010-09-20
1、我们采用的Annotation的方式来配置需要的配置
有点滥用Annotation了吧。不过Annotation的作用范围还有争议
有点滥用Annotation了吧。不过Annotation的作用范围还有争议
7 楼
qiyueguxing
2010-09-20
楼主加油,支持!
6 楼
yuhe
2010-09-20
好,mark下,不知道什么时候写完呢?
5 楼
darwintest
2010-09-20
目前看着有点散,都出来再说吧
4 楼
peak
2010-09-20
这个莫非是要把域对象整合上DAO的功能?
3 楼
黑暗浪子
2010-09-20
BestUpon 写道
nothink 写道
看了以后不太明白想表达些什么.能否解释一下
等所有的层整理出来了,整体看就清晰了!
等整理完了,再贴出来,不用太急。最重要的是逻辑严整和易学易用。
2 楼
BestUpon
2010-09-19
nothink 写道
看了以后不太明白想表达些什么.能否解释一下
等所有的层整理出来了,整体看就清晰了!
1 楼
nothink
2010-09-19
看了以后不太明白想表达些什么.能否解释一下
发表评论
-
框架底层综合+快速开发+代码重用框架-设计(Action)层)
2010-09-20 18:15 1319框架底层综合+快速开发+代码重用框架-设计(Model层 ... -
框架底层综合+快速开发+代码重用框架-设计(Service)层)
2010-09-20 17:51 2375框架底层综合+快速开发+代码重用框架-设计(Mod ... -
框架底层综合+快速开发+代码重用框架-设计(Dao层)
2010-09-20 17:06 1709二、Dao层 Dao层是数据化持久层,以前我们习惯使用 ... -
状态模式(State)续谈
2010-06-18 00:49 1480前面写了一片文章:状态模式(state)http://best ... -
状态模式(State)
2010-06-17 10:43 6172请参看:状态模式续. http://bestupon.i ... -
单例模式(Singleton)
2010-06-13 11:09 2036首先我们先看看一个例子,在说什么是单利模式(Singleton ... -
原型模式(Prototype)
2010-06-13 09:59 1248原型模式: 1、定义:原型模式就是通过一个原型对象来 ... -
责任链模式一
2010-01-26 16:42 1656责任链模式(Chain of Responsibility)是 ... -
创建者模式(Builder)
2009-09-29 12:32 1470创建者模式:(builder) 1、定义:创建者模式就是将一个 ... -
总结几个工厂模式
2009-09-28 11:29 1154总结几个工厂模式: 1、简单工厂模式:由一个类来负责所有的产品 ... -
抽象工厂模式
2009-09-28 11:20 1399package org.bestupon.abstratf ... -
工厂方法模式
2009-09-27 15:07 910工厂方法模式: 定义:工厂方法模式是用于创建对象的接口,让子 ... -
简单工厂模式
2009-09-27 14:19 1300简单工厂模式又叫静 ...
相关推荐
因此,"开发者突击_Java+Web主流框架整合开发_J2EE+Struts+Hibernate+Spring+源代码"这个资源对于初学者和有经验的开发者来说都是宝贵的参考资料,能帮助他们快速上手并精通SSH2框架的整合开发。
【个人底层框架】是一种软件开发中的基础架构,它通常由开发者根据自己的需求和经验构建,旨在提高代码的可重用性、可维护性和系统效率。三层架构是这种框架的一个常见设计模式,它将应用程序分为三个主要部分:表示...
《JAVA SMART系统-系统框架设计与开发》是一个深入探讨Java技术在构建智能系统中的应用的项目,包含了完整的源代码和相关论文。这个压缩包提供的内容是对于开发者和学习者来说非常宝贵的资源,它揭示了如何利用Java...
这个框架结合了Model-View-Presenter(MVP)设计模式、Reactive Extensions(RxJava)编程库以及Retrofit网络请求库,为开发者提供了强大的工具来构建可维护、可测试的复杂应用。 **MVP设计模式**: MVP(Model-View...
Vue3 快速开发模板框架是现代Web应用开发的一个强大工具,它利用Vue.js的最新特性,为开发者提供了一个高效、灵活的起始点,帮助他们迅速构建复杂的单页应用程序(SPA)。Vue3的更新带来了许多性能提升和新功能,...
在本场景中,提到的"asp.net网站高效底层框架"是指一种优化过的框架,设计用于提升网站开发效率,特别是在数据库连接和访问速度方面。 首先,让我们详细探讨ASP.NET框架。ASP.NET提供了一个丰富的开发环境,包括...
通过合理利用SSH框架,开发者可以更加专注于业务逻辑的实现,而无需过多关注底层的实现细节,大大提高了开发效率和代码质量。这个"ssh框架开发包"提供的jar文件正是实现这一框架的基础,为开发者免去了自行下载和...
Dva是基于Redux和React-Router的轻量级JavaScript应用框架,它的核心理念是"Model-Driven UI",即以数据模型为中心驱动UI变化。Dva简化了状态管理,提供了路由集成,并且内置了Promise和async/await支持,使得异步...
根据提供的信息,我们可以推断出该资源主要涉及的是关于Microsoft .NET框架程序设计的相关内容。虽然没有具体的章节或概述信息,但我们可以基于标题和描述来总结一些与Microsoft .NET框架程序设计相关的知识点。 ##...
Python库通常包含了可重用的代码,可以帮助开发者快速实现特定功能,如数据处理、网络通信、科学计算等。 根据提供的压缩包子文件的文件名称列表,我们只有一个文件`dffml-model-scikit-0.1.0`。这通常意味着当我们...
ZK框架是一款用于Web开发的开源富客户端框架...整体来说,ZK框架开发手册中涵盖了从基础架构到高级功能的广泛知识点,为开发者提供了一套完整的Web应用开发工具包,让开发者能够快速构建功能强大、响应迅速的Web应用。
PHP框架是用于构建高效、可维护的Web应用的开发工具,它们提供了一套预定义的结构和最佳实践,使得PHP开发者能够快速上手并遵循一致的编码标准。本压缩包包含的是PHP框架的相关代码,可供学习和参考。下面将详细讨论...
UHPHP是一个轻开发,重数据结构和存储关系,高度重用,灵活性和扩展性的业务型开发框架。 UHPHP保留原生态php语法风格,初级程序也能快速掌握和实施项目开发。 为满足不同的业务开发需要, UHPHP不单具有MVC的标准...
这种框架不仅通过代码的封装和重用来减少开发工作量,还能通过清晰的模块化设计来提高代码的可读性和可维护性。对于希望利用BREW平台进行手机游戏开发的团队来说,这种框架提供了一个很好的起点。
ujframe框架的设计遵循MVC(Model-View-Controller)模式,这是Web应用设计中的一个经典架构模式。Model代表数据模型,负责处理和存储数据;View负责展示数据;Controller作为中间层,处理用户请求并控制Model和View...
Django作为Python的一个流行Web框架,是基于MTV(Model-Template-View)模式设计的,旨在快速、安全且实用地开发Web应用。 1. Web开发基本知识 Web应用的核心是HTTP(超文本传输协议),它是互联网上应用最广泛的...
【Web开发框架】是软件开发领域中的一个重要概念,它为构建Web应用程序提供了结构化和可重用的组件,使得开发者可以更加高效地进行工作。在众多的Web开发框架中,PHP Web框架以其开源、易学、高效的特点备受青睐。...
Yii的MVC模式提供了一种快速开发的手段,其核心理念是程序代码的重用和各种关注点的分离。Yii中的MVC模式使Web开发过程可复用度最大化,显著提高开发者的Web应用开发速度。 Yii的模型用于表示底层数据结构以及与其...