`
allwefantasy
  • 浏览: 46939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

超敏捷Java开发框架ServiceFramework

阅读更多


ServiceFramework 根据其名字就可以知道,是一个面向服务的一站式MVC框架。脱胎于内部的一个搜索项目,通常我们定位在移动应用后端.

 

ServiceFramework设计的理念

能否让用户能够用最简单的方式解决80%的问题才是框架真正应该追求的。Java 很多框架就是为了追求框架本身的完美和扩展性而忽略了上面的原则。

 

项目地址: https://github.com/allwefantasy/ServiceFramework

 

ServiceFramework 是为了快速开发而生的。大部分互联网应用是以数据为中心的,尤其是关系型数据库。所以如果能简化数据操作,便能有效减少代码。

所以我们参照Rails ActiveRecord 对模型类做了完善的充血实现。这其中绝对没有因为java是静态语言导致的一些限制而做任何妥协。后面示例我们可以看到这一点。

核心优势是,Model方面真正实现了Java的充血模型,Query使用了ActiveRecord的风格。相信我,没有任何妥协。举个例子:

从 Form 到 Model 再到 DB

 

 

Order order = Order.create(params());
if(order.save()){
  render(ok())
}
else{
  render(HTTP_403,"参数错误");
}
 

 

下面是一个很优秀的被Play所推荐的ORM框架Ebean的Query Interface.调用方式如下

 

 

Ebean.find(Order.class)  
                .fetch("details")  
                .setMaxRows(100)  
                .where().eq("status",Order.Status.NEW)  
                .order().desc("id")  
                .findList();  
 

说说几点

  1. 模型类还是被人操作来操作去,比如需要Ebean操作Order 模型。
  2. 链式关系比较诡异,有层级关系。比如 where()下有eq()等。

再看看ServiceFramework的query interface

 

 

 List<Order> orders = Order.where("status=:status",map("status",Order.Status.NEW))
                            .joins("details")
                            .limit(100)
                            .order("id desc")
                            .fetch();
   

其实我通常会这样子:

 

@Entity
  class Order extends Model
  {
     public static JPQL status_new(){
       return where("status=:status",map("status",Order.Status.NEW));
     }
  }

  List<Order> orders = Order.status_new()
                            .joins("details")
                            .limit(100)
                            .order("id desc")
                            .fetch();

   

 

非常简单直观,天然以sql关键字区分,没有任何学习成本,都是按程序员最直观的方式进行。

其实不仅仅是Model层,controller层的设计也极尽简化。我们也对过滤器(拦截器)做了重新实现,这不同于一般的如Struts2的实现。同时我们还提出了一个理念,在Controller层应该提供一个函数库,就像PHP那样。当然,我们现在只是提供一些比较实用的函数。但是以后会慢慢添加。

此外还有一些小特点,譬如

  • 一站式,不需要你整合各个框架
  • 随时clone随时使用,十分钟wiki之后便能着手开发。
  • 你不用考虑项目结构
  • 你不用考虑如何分层
  • 你不需要考虑配置文件。我们提供一个统一的配置对象供你使用
  • 我们尽量使用一些最佳实践来组织项目。比如使用IOC做基础。这意味着,你大部分类都会自动被容器所管理。

最后,欢迎Rails开发者回归Java。^-^

分享到:
评论
10 楼 allwefantasy 2012-09-25  
chinasofthz 写道

大牛哥,网上full-stack的资料很少啊,我就知道些ssh的小菜鸟。看到这个项目很不适应,jetty的服务开起来但是例子没运行成功过。。。我是在windows下在eclipse中建了个java工程,用junit运行TagControllerTest中的testsave()方法。在走到Map<String, Settings> groups = tuple.v1().getGroups(ServiceFramwork.mode.name() + ".datasources");v1()为空

测试需要全部运行。就你目前的情况。建议你删除数据库重新建表。然后用eclipse里的junit 运行DynamicSuiteRunner。  jetty 开起来后,你可以使用curl 进行测试,比如创建一个tag_group,你可以这样:

curl -XPOST 'http://127.0.0.1:9400/tag_group' -d 'name=java'
9 楼 chinasofthz 2012-09-23  
char1st 写道
chinasofthz 写道
下了你的项目看了下 说的好像有view层 但是项目中没有,前台怎么传数据呢 是一个java工程?好像也不用发布到服务器什么的

你可以了解下full-stack这个概念。

大牛哥,网上full-stack的资料很少啊,我就知道些ssh的小菜鸟。看到这个项目很不适应,jetty的服务开起来但是例子没运行成功过。。。我是在windows下在eclipse中建了个java工程,用junit运行TagControllerTest中的testsave()方法。在走到Map<String, Settings> groups = tuple.v1().getGroups(ServiceFramwork.mode.name() + ".datasources");v1()为空
8 楼 char1st 2012-09-21  
chinasofthz 写道
下了你的项目看了下 说的好像有view层 但是项目中没有,前台怎么传数据呢 是一个java工程?好像也不用发布到服务器什么的

你可以了解下full-stack这个概念。
7 楼 chinasofthz 2012-09-21  
下了你的项目看了下 说的好像有view层 但是项目中没有,前台怎么传数据呢 是一个java工程?好像也不用发布到服务器什么的
6 楼 dingbuoyi 2012-08-20  
慢慢等这个框架完善。。。
5 楼 mistbow 2012-08-19  
可不可以建一个Q~Q~群 来一起学习学习这个框架呀:)
4 楼 char1st 2012-08-15  
allwefantasy 写道
char1st 写道
net.csdn.jpa.type.DBInfo 在mysql 获取的数据库表名和列名有大小写的问题的 ,导致用ctClass.getSimpleName()得到字符串和dbinfo中的表名和列名不一致 。

你应该是windows下的Mysql数据库 对吗? 那可能会遇到这个问题。

是的  ctClass.getSimpleName().toLowerCase() 就暂时不会有问题了。
3 楼 allwefantasy 2012-08-15  
char1st 写道
net.csdn.jpa.type.DBInfo 在mysql 获取的数据库表名和列名有大小写的问题的 ,导致用ctClass.getSimpleName()得到字符串和dbinfo中的表名和列名不一致 。

你应该是windows下的Mysql数据库 对吗? 那可能会遇到这个问题。
2 楼 allwefantasy 2012-08-15  
char1st 写道
net.csdn.jpa.type.DBInfo 在mysql 获取的数据库表名和列名有大小写的问题的 ,导致用ctClass.getSimpleName()得到字符串和dbinfo中的表名和列名不一致 。

allwefantasy@gmail.com 这是我的邮箱,能不能发一个你debug后的截图给我。另外说下你的mysql数据库版本.非常感谢您提出了问题。
1 楼 char1st 2012-08-15  
net.csdn.jpa.type.DBInfo 在mysql 获取的数据库表名和列名有大小写的问题的 ,导致用ctClass.getSimpleName()得到字符串和dbinfo中的表名和列名不一致 。

相关推荐

    基于敏捷架构的ServiceFramework:移动应用后端Java MVC框架设计源码

    该项目为敏捷架构设计的ServiceFramework,是一个专注于移动应用后端服务的Java MVC框架。该框架采用Java语言编写,同时包含Scala和Shell脚本,共计397个文件,其中Java文件占主导地位,达319个。ServiceFramework...

    Java MVC framework, agile, fast, rich domain model, made e.zip

    在提供的压缩包文件"ServiceFramework-master"中,很可能是包含了一个名为"ServiceFramework"的服务框架的源代码仓库。这个框架可能提供了构建基于Java MVC的应用服务的基础设施,帮助开发者快速搭建和扩展业务服务...

    ServiceFramework:Java MVC框架,敏捷,快速,丰富的域模型,特别为移动应用程序的服务器端制作(一个敏捷,快速,富领域模型的Java MVC框架,专为移动应用体积量身定做)

    ServiceFramework WikiServcieFramework定位在移动互联网领域,发展开发的高效性,其开发效率可以比肩。编译现在编译步骤: git clone git@github.com:allwefantasy/ServiceFramework.gitmvn install -Pscala-2.11...

    JAVA英语语言词汇

    在编程领域,特别是Java开发中,掌握相关的英语词汇至关重要,因为大部分的技术文档、API参考、框架和库的官方文档都是英文的。以下是一些与"JAVA英语语言词汇"相关的知识点,旨在帮助你理解和运用这些术语。 1. **...

    Java项目经验.pdf

    4. **框架应用**:Spring Framework是最常见的Java EE开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)架构等特性。MyBatis则是一个优秀的持久层框架,简化了数据库操作。了解并熟练使用...

    JAVA工程师笔试大全[J2EE]

    掌握JAVA的核心API,如集合框架(Collections Framework)、流和文件处理(IO/NIO)、异常处理、多线程等,对于JAVA工程师来说是必不可少的。此外,熟悉反射、注解、泛型等高级特性,能够在开发过程中提供更强大的...

    基于 springboot、ant-design-vue 的开源框架+源代码+文档说明

    Freeman是基于 Spring Boot2 + Spring data Jpa + Shiro + Vue2 + JWT 的前后端分离的敏捷开发框架;以Spring Framework为核心容器,Spring data Jpa(Hibernate实现)为数据访问层, Apache Shiro为权限框架,Redis对...

    计算机的实习报告.pdf

    在实习过程中,我深入学习了两个主要的软件开发技术:Java和.Net,特别是在开发Online Shop System时,我不仅掌握了.NET框架下的MVC设计模式,还对电子商务网站的基本架构和功能有了深入理解。在Java Training阶段,...

    J2EE架构师手册.rar

    6. **JSF(JavaServer Faces)**:一种用于构建用户界面的MVC(Model-View-Controller)框架,简化了Web应用的开发。 7. **JTA(Java Transaction API)**:处理事务管理,确保多操作的原子性、一致性、隔离性和...

    PaaS云平台建设和应用云化方案.pptx

    Pivotal的Spring框架是Java开发中的重要工具,特别在微服务领域,Spring Boot简化了应用开发,而Spring Cloud提供了服务发现、配置中心、负载均衡等微服务治理功能,帮助开发者构建和管理分布式系统。 PaaS的生产...

    CXF介绍

    CXF,全称CXF CXF (Common eXtensible Framework),是一个开源的Java框架,主要用于构建和开发Web服务。它整合了多种Web服务标准,如SOAP、RESTful、WS-*等,为开发者提供了一站式的Web服务实现方案。CXF这个名字...

    J2EE体系结构及其主要设计模式

    - **2.3.4 减少通信成本**:采用敏捷开发方法,减少不必要的会议和文档。 - **2.4 测试** - **2.4.1 先期建立测试工程**:制定详细的测试计划和策略。 - **2.4.2 使用测试框架以实现自动化测试**:利用单元测试和...

    ADF资料

    Oracle Application Development Framework(ADF)是由Oracle公司研发的一款强大的企业级Java应用程序开发框架。ADF旨在简化复杂的企业应用开发过程,提供一套全面的工具和技术,帮助开发者快速构建高性能、可扩展且...

    springboot-yml.rar

    总结来说,SpringBoot YML文件是构建高效三层架构的关键,它允许开发者以声明式的方式配置应用,使得开发过程更加敏捷和高效。通过合理利用YML,我们可以实现灵活的服务器设置、数据源配置、ORM框架的整合以及安全...

    Sping+ibatis

    Spring框架以其优秀的依赖注入(DI)和面向切面编程(AOP)特性,成为了Java企业级应用开发的首选。iBATIS作为一个轻量级的持久层框架,以其灵活的SQL映射机制赢得了开发者们的喜爱。将Spring与iBATIS相结合,能够...

    play-cxf:Apache CXF定制传输模块,用于将SOAP与Play Framework结合使用

    Apache CXF是一个开源的Java框架,主要用于构建和开发SOAP(Simple Object Access Protocol)和RESTful Web服务,而Play Framework则是一个现代、敏捷的Web应用框架,以Java和Scala为主要编程语言。当需要在一个基于...

    feature-flag-service

    在Java开发中,实现功能标记服务可以使用各种框架和库。例如,我们可以使用如Togglz或Unleash这样的专门库,它们提供了强大的功能管理和API,让开发者能够轻松地在运行时切换功能状态。这些库通常与数据库或配置服务...

    多Agent虚拟企业动态联盟系统架构研究

    JADE(Java Agent Development Framework)是用Java语言开发的符合FIPA规范的软件框架,是FIPA多Agent平台参考模型的一个开发环境实现。JADE极大地简化了多智能体系统的开发过程,主要组成部分包括Agent的运行时环境...

    云计算技术

    4. HSF(High Speed Service Framework)介绍:HSF是阿里巴巴开源的高性能服务框架,主要用于构建微服务架构。它基于Java,提供了服务的注册、发现、调用等功能,使得服务之间可以轻松通信,提高了系统的可扩展性和...

Global site tag (gtag.js) - Google Analytics