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

BizFlow extends CRUD

阅读更多

  CRUD(Create Read Update Delete)是一般应用程序中最基础的操作,但是用户的需求却很难直接映射到CRUD操作上。例如常见的需求如下:
 1. 不同的业务处理处于不同状态的业务对象:
     业务A处理状态为X的业务对象,而业务B处理状态为Y的业务对象
 2. 业务对象处于不同状态的时候允许的操作不同:
    状态处于X的业务对象允许操作U, 而状态处于Y的业务对象允许操作V
 3. 不同的业务操作可能修改业务对象的不同属性:
     操作U修改业务对象的属性P, 操作V修改业务对象的属性Q
 4. 具有不同权限的人能够从事的业务不同:
      角色R处理业务A, 角色S处理业务B
 5. 具有不同权限的人即使从事同一业务,所能够操作的业务对象集合也不同:
     角色R处理部门M的业务对象,角色S处理部门N的业务对象.
 6. 具有不同权限的人即使可以操作同一业务对象,所能够采取的业务操作也不同:
      角色R只能进行操作U, 角色S只能进行操作V
 7. 在业务对象上执行操作之后可能造成状态变迁:
      处于状态X的业务对象上执行操作U后状态变为Y

以上这些需求往往是系统中最易变的部分, 而它们在概念上恰恰表现为对CRUD的一种限制性描述. 因此通过如下扩展我们可以定义BizFlow的概念: BizFlow = CRUD + Filter. 根据这种观念, witrix平台中BizFlow被实现为DaoWebAction的一种无缝扩展.
   在jsplet框架中我们通过如下url模式来访问后台的CRUD操作:
   /list.jsp?objectName=MyObj&objectEvent=Query
为了实现BizFlow只需通过spring为DaoWebAction配置一个xml配置文件, 此后仍然可以通过
    /list.jsp?objectName=MyObj&objectEvent=Query
来访问后台的CRUD操作,只是后台会自动应用配置文件中的 bizId="default", bizActionId="Query-default"等配置项.
如果我们采用如下url来访问
    /list.jsp?objectName=MyObj&objectEvent=Query&$bizId=test&$bizActionId=test   
则后台将应用配置项 bizId=manage, bizActionId=Query-test, 而
    /list.jsp?objectName=MyObj&objectEvent=BizAction&$bizId=test&$bizActionId=test   
则对应于配置项 bizId=manage, bizActionId=BizAction-test.
   应用BizFlow配置项之后,所有前台代码都可以不做出任何改变, 因为它们只是对于给定数据的展现.
  
   BizFlow可以看作是CRUD加上简单的流程控制和权限控制所构成, 但是它与完整的工作流模型还是有着显著区别的. 工作流中所关注的重点首先是流程实例而不是业务对象实例, 在一个流程中是否存在唯一的业务对象,以及业务对象的状态是否随着流程流转发生变化完全是一件独立的事情,它们并不属于抽象的工作流模型本身. 理论上说,一个业务对象可以同时参与多个流程. 在工作流建模中主要通过流程步骤的先后顺序的约束来描述业务进程, 处于同一状态的业务对象可能处在不同的流程步骤中. 而BizFlow可以看作是状态驱动的, 当前业务步骤直接由业务对象的状态决定. 在BizFlow中因为视角是业务对象的状态,因此我们直接面对的是大量处于同一状态的不同的业务处理过程, 而workflow中往往建模的时候强调单流程实例视角,而一般缺乏对于流程实例相关性的描述. 现在国内很多人认为工作流就是状态机其实是对workflow概念的一种误读.
 

分享到:
评论

相关推荐

    基于Spring MVC的CRUD控制器

    RoleController extends CrudController<Role> 只要简单的继承就可以通过/role/save.do、/role/remove.do等方式来管理实体, 如果有更多复杂的业务操作,可以重写父类的回调函数,类似于面向切面编程。 jcwx.cn,...

    对play!的CRUD的一次改造

    的CRUD 进行改造,改代码还会持续重构,并不完善。 1.将create,show,delete,list都改成@Util方法,可以类似 public static void show(String id){ MyCRUD.show(id); } 的方式调用。更通用。 2.增加@...

    [简单]Spring简单CRUD示例

    public interface UserRepository extends JpaRepository, Long> { } ``` 现在,我们可以使用这个Repository在Service层执行CRUD操作: ```java @Service public class UserService { private final ...

    在Struts 2中实现CRUD

    ### Struts 2中实现CRUD操作详解 #### 一、引言 CRUD操作是软件开发中最常见的数据处理方式之一,它代表了对数据进行的四种基本操作:创建(Create)、读取(Read)、更新(Update)与删除(Delete)。在企业级应用开发中,...

    spring-boot-web-restfulcrud代码示例

    public interface UserRepository extends JpaRepository, Long> { } ``` 这个接口扩展了 `JpaRepository`,Spring Data 自动提供了 CRUD 方法,无需编写具体的实现。 IDEA 是一款常用的 Java 开发集成环境,对于 ...

    struts2与hibernate结合crud实例

    ### Struts2与Hibernate结合实现CRUD操作实例详解 #### 一、背景介绍 CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)四个英文单词首字母的缩写,它是软件工程中最基本的数据操作。本文将详细...

    Spring+jpa实现简单的CRUD

    public interface UserRepository extends JpaRepository, Long> { } ``` **Service层** 3. 创建一个服务类,用于处理业务逻辑。在这里,我们可以注入`UserRepository`,然后调用其提供的方法。 ```java import ...

    springboot crud操作

    public interface UserRepository extends JpaRepository, Long> { } ``` 现在,我们可以编写控制器(Controller)来实现CRUD操作: ```java import org.springframework.beans.factory.annotation.Autowired; ...

    Sqlite的CRUD基础应用Demo

    public class DatabaseHelper extends SQLiteOpenHelper { // 数据库版本号 private static final int DATABASE_VERSION = 1; // 数据库名 private static final String DATABASE_NAME = "SQLiteDemo.db"; //...

    Dom4j实现xml的CRUD

    public class UserManageServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String operation = request...

    java中extends与implements的区别.docx

    Java 中 extends 与 implements 的区别 Java 中的继承和实现接口是两个基本概念,extends 和 implements 是两个关键字,它们之间的区别是 Java 编程语言中最重要的基础知识。 extends 的作用 在 Java 中,extends...

    extends继承的使用方法练习

    这个过程被称为“扩展”或使用关键字 `extends`。本教程将深入探讨如何在Java中使用 `extends` 关键字实现继承,并通过一个小的Java程序进行实践。 **一、继承的概念** 继承是一种代码重用机制,子类可以从父类那里...

    利用Android中的SQLite进行CRUD

    public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "MyDatabase.db"; public static final String TABLE_NAME = "Student"; public static final String COL_...

    springboot-mysql-crud-master.zip

    public interface UserRepository extends JpaRepository, Long> { } ``` 现在,你可以在Controller层使用这个`UserRepository`来处理HTTP请求,实现增删改查功能。例如,创建一个新的用户: ```java @...

    JFinal2.2CRUD

    public class User extends Model<User> { public static final User me = new User(); // 定义字段 private String name; private int age; // getters 和 setters... } // 创建操作 User user = new User...

    android中使用SQLite进行CRUD操作的实例

    public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); // 获取数据库实例 public static AppDatabase getInstance(Context context) { if (INSTANCE == null) { ...

    gwt 3.2.0 crud 操作

    在GWT 3.2.0版本中,CRUD(Create、Read、Update、Delete,创建、读取、更新、删除)操作是开发数据管理应用的基础部分,我们来详细探讨这个主题。 首先,让我们理解CRUD操作的含义: 1. **创建(Create)**: 这个...

    Springboot整合MongoDB进行CRUD操作的两种方式(实例代码详解)

    public interface UserRepository extends MongoRepository, String> { // Spring会帮我们实现好对应接口的方法,开发人员连SQL都不用写,非常省心。 } ``` 方式二:MongoTemplate 定义数据访问层UserRepository:...

Global site tag (gtag.js) - Google Analytics