动态构建应用程序

 

       今年2017年8月进入律所行业,精细化管理和业务流成为现在主要开发方向,目前采用的技术是以数据为核心的ado三层架构的web MVC erp系统开发,我们现将数据访问层改为dapper。它有一下特点:

       1.T-SQL产生的数据模型与业务模型、数据传输模型公用一个,界面需要什么,模型层就加什么。

       2.业务层代码主要调用DAL层,一部分SQL拼接放在业务层。

       3.MVC采用ViewBag做数据传输,最经典的案例是形成动态表单,该功能由三个表组成,通过存储过程驱动数据,所有动态表单数据都保存在这里。

       优点:业务快速扩张,直接调用已建立好的模块实现对应功能。

       缺点:业务层过于厚重,代码耦合严重,检查和修改的时候比较费力。模型与实体合为一个,代码检查和修改严重依赖DAL层SQL语句。

       现有系统的优势在于基于动态表单的扩展迅速。

  劣势在于统计复杂,数据迁移尤其复杂。

对于现有系统开发的难点在于,理清数据与业务关系,对现有系统中每个业务必须达到知根知底,盲人摸象都没办法进行功能开发。

基于以上,我考虑将系统中业务逻辑进行整理,并整理相关SQL语句,将SQL语句存库。通过存储过程的方式动态调用与执行。这里面涉及一下内容:

  1. 动态模型生成与管理。包括SearchDTO,EntityModel。(测试成功)
  2. 动态生成SQL语句并管理。SQL语句采用存储过程实现。(测试成功)
  3. 将以上两个功能存库,建立逻辑关系,对其进行管理和分析。(测试成功)
  4. 动态调用SqlConnection或者Dapper。(测试成功)
  5. 依靠以上功能调用,并建立项目。

开发该功能分为三个阶段:

一、动态构建DAL层并存库管理。

二、动态构建业务并存库管理。

三、建立web项目。

目前实现功能:

  1. 动态模型的建立、赋值和管理。
  2. 根据动态模型生成SQL语句并保存为存储过程。(存储过程能够实现条件动态拼接),构建SQL如下:
    USE [test]
    GO
    /****** Object:  StoredProcedure [dbo].[pr_GetATest]    Script Date: 2017/12/8 15:52:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[pr_GetATest]
    (
        @ID       int,
        @Name        varchar(200),
        @Code    varchar(200),
        @Number      DECIMAL
    )
    as
    begin
        
           set nocount on;
        
    DECLARE @Param         NVARCHAR(MAX) = N'',@sqlcommand   NVARCHAR(MAX) = N''
    
            SET @sqlcommand ='SELECT ID ,
                                       Name ,
                                       Code ,
                                       Number FROM dbo.ATest where 1=1 '
            
            IF(@ID IS NOT NULL AND @ID!=0)
                SET @sqlcommand = CONCAT(@sqlcommand,' AND ID= @IDS ')
    
            IF(@Name IS NOT NULL AND @Name!='')
                SET @sqlcommand = CONCAT(@sqlcommand,' AND Name= @NameS ')
    
            IF(@Code IS NOT NULL)
                SET @sqlcommand = CONCAT(@sqlcommand,' AND Code=@CodeS ')
    
            IF(@Number IS NOT NULL)
                SET @sqlcommand = CONCAT(@sqlcommand,' AND Number=@NumberS ')
    
            SET @Param= '@IDS        int,
                         @NameS        varchar(200),
                         @CodeS     varchar(200),
                         @NumberS        DECIMAL '
    
    
            PRINT @sqlcommand
            EXEC sp_executesql @sqlcommand,@Param,
                                @IDS        =    @ID  ,  
                                @NameS      =    @Name , 
                                @CodeS      =    @Code  ,
                                @NumberS    =    @Number
            
    END
    View Code

        中午一小时,继续进行中

posted on 2017-12-08 18:38  kloszhu  阅读(210)  评论(1编辑  收藏  举报

导航