`
BestUpon
  • 浏览: 290100 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

框架底层综合+快速开发+代码重用框架-设计(Model层)

阅读更多

框架底层综合+快速开发+代码重用框架-设计(Model层)

框架底层综合+快速开发+代码重用框架-设计(Dao层)

框架底层综合+快速开发+代码重用框架-设计(Service层)

框架底层综合+快速开发+代码重用框架-设计(Action层)

 

 

我们现在几乎都是基于SSH(SSJ)Web开发的,这样就需要我们设计一个快速的,代码可复用性强的高质量的代码,在这里介绍一种思路,和个人拙劣的实现!将会在此写一系列的相关文章。欢迎大家交流。

说明:

1、我们采用的Annotation的方式来配置需要的配置

2、持久层使用JPAHibernate实现。

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的作用范围还有争议

你说的也没错,没有对错之分,只有习惯与不习惯的区别~~~如不习惯,还是使用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的作用范围还有争议

你说的也没错,没有对错之分,只有习惯与不习惯的区别~~~如不习惯,还是使用XML吧!
8 楼 pengzhoushuo 2010-09-20  
1、我们采用的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  
看了以后不太明白想表达些什么.能否解释一下

相关推荐

    开发者突击_Java+Web主流框架整合开发_J2EE+Struts+Hibernate+Spring+源代码

    因此,"开发者突击_Java+Web主流框架整合开发_J2EE+Struts+Hibernate+Spring+源代码"这个资源对于初学者和有经验的开发者来说都是宝贵的参考资料,能帮助他们快速上手并精通SSH2框架的整合开发。

    个人底层框架

    【个人底层框架】是一种软件开发中的基础架构,它通常由开发者根据自己的需求和经验构建,旨在提高代码的可重用性、可维护性和系统效率。三层架构是这种框架的一个常见设计模式,它将应用程序分为三个主要部分:表示...

    JAVA SMART系统-系统框架设计与开发(源代码+论文).zip

    《JAVA SMART系统-系统框架设计与开发》是一个深入探讨Java技术在构建智能系统中的应用的项目,包含了完整的源代码和相关论文。这个压缩包提供的内容是对于开发者和学习者来说非常宝贵的资源,它揭示了如何利用Java...

    MVP+RxJava+Retrofit, 一个Android应用层快速开发基础框架.zip

    这个框架结合了Model-View-Presenter(MVP)设计模式、Reactive Extensions(RxJava)编程库以及Retrofit网络请求库,为开发者提供了强大的工具来构建可维护、可测试的复杂应用。 **MVP设计模式**: MVP(Model-View...

    基于vue3的快速开发模板框架

    Vue3 快速开发模板框架是现代Web应用开发的一个强大工具,它利用Vue.js的最新特性,为开发者提供了一个高效、灵活的起始点,帮助他们迅速构建复杂的单页应用程序(SPA)。Vue3的更新带来了许多性能提升和新功能,...

    asp.net网站高效底层框架用于网站开发,高效反应在数据库连接上

    在本场景中,提到的"asp.net网站高效底层框架"是指一种优化过的框架,设计用于提升网站开发效率,特别是在数据库连接和访问速度方面。 首先,让我们详细探讨ASP.NET框架。ASP.NET提供了一个丰富的开发环境,包括...

    ssh框架开发包

    通过合理利用SSH框架,开发者可以更加专注于业务逻辑的实现,而无需过多关注底层的实现细节,大大提高了开发效率和代码质量。这个"ssh框架开发包"提供的jar文件正是实现这一框架的基础,为开发者免去了自行下载和...

    react-用React编写的基于TaroDva构建的适配不同端的时装衣橱

    Dva是基于Redux和React-Router的轻量级JavaScript应用框架,它的核心理念是"Model-Driven UI",即以数据模型为中心驱动UI变化。Dva简化了状态管理,提供了路由集成,并且内置了Promise和async/await支持,使得异步...

    Microsoft.NET框架程序设计(修订版)清晰版 PDF 下载地址

    根据提供的信息,我们可以推断出该资源主要涉及的是关于Microsoft .NET框架程序设计的相关内容。虽然没有具体的章节或概述信息,但我们可以基于标题和描述来总结一些与Microsoft .NET框架程序设计相关的知识点。 ##...

    PyPI 官网下载 | dffml-model-scikit-0.1.0.tar.gz

    Python库通常包含了可重用的代码,可以帮助开发者快速实现特定功能,如数据处理、网络通信、科学计算等。 根据提供的压缩包子文件的文件名称列表,我们只有一个文件`dffml-model-scikit-0.1.0`。这通常意味着当我们...

    ZK框架开发手册

    ZK框架是一款用于Web开发的开源富客户端框架...整体来说,ZK框架开发手册中涵盖了从基础架构到高级功能的广泛知识点,为开发者提供了一套完整的Web应用开发工具包,让开发者能够快速构建功能强大、响应迅速的Web应用。

    PHP框架代码,可以看一下

    PHP框架是用于构建高效、可维护的Web应用的开发工具,它们提供了一套预定义的结构和最佳实践,使得PHP开发者能够快速上手并遵循一致的编码标准。本压缩包包含的是PHP框架的相关代码,可供学习和参考。下面将详细讨论...

    UHPHP底层源码和开发实例

    UHPHP是一个轻开发,重数据结构和存储关系,高度重用,灵活性和扩展性的业务型开发框架。 UHPHP保留原生态php语法风格,初级程序也能快速掌握和实施项目开发。 为满足不同的业务开发需要, UHPHP不单具有MVC的标准...

    一种BREW游戏开发框架

    这种框架不仅通过代码的封装和重用来减少开发工作量,还能通过清晰的模块化设计来提高代码的可读性和可维护性。对于希望利用BREW平台进行手机游戏开发的团队来说,这种框架提供了一个很好的起点。

    基于PHP的ujframe简单快速PHP开发框架.zip

    ujframe框架的设计遵循MVC(Model-View-Controller)模式,这是Web应用设计中的一个经典架构模式。Model代表数据模型,负责处理和存储数据;View负责展示数据;Controller作为中间层,处理用户请求并控制Model和View...

    django 学习笔记(1)—— python和web开发框架(csdn)————程序.pdf

    Django作为Python的一个流行Web框架,是基于MTV(Model-Template-View)模式设计的,旨在快速、安全且实用地开发Web应用。 1. Web开发基本知识 Web应用的核心是HTTP(超文本传输协议),它是互联网上应用最广泛的...

    Web开发框架

    【Web开发框架】是软件开发领域中的一个重要概念,它为构建Web应用程序提供了结构化和可重用的组件,使得开发者可以更加高效地进行工作。在众多的Web开发框架中,PHP Web框架以其开源、易学、高效的特点备受青睐。...

    MVC设计模式在Yii框架中的应用与研究.pdf

    Yii的MVC模式提供了一种快速开发的手段,其核心理念是程序代码的重用和各种关注点的分离。Yii中的MVC模式使Web开发过程可复用度最大化,显著提高开发者的Web应用开发速度。 Yii的模型用于表示底层数据结构以及与其...

Global site tag (gtag.js) - Google Analytics