• 中国@代码生成技术@国产


    第一节:

    大家好:
    我们今天讲的还是代码生成,我们知道的有codedom是微软生成自己框架代码的一个类,可以说是自己生成
    自己了.不过我说的生成是根据一定的规则来生成一定的代码.
      我们的DotNetAuto已经是升到了b/s框架了,可是还是不完善的,现在最主要的问题是:可空,model层定义
    ,dal的定义,表现层的代码实现.我们今天晚上来探讨一下.
       可空,在数据库中,因为有一些值不是所必须要的,按照这一定的原则,给定了一些空值,但是这些空值在
    我们程序员的开发过程中,出现了许多不必要的麻烦,首先,在从数据库传值给model的时候,
    当值类型为string的时候:  DBNULL可以用null表示, 但是在.net 2.0以前int ,datetime的表示就是比较
    的麻烦了. 我估计,以前人们为了表示这些空值,是这样做的-1表示int的空值,1900-1-1表示datetime的空
    值, 当然这在一定的条件下是可以的,但是总体来说却是不怎么明朗的.在.net2.0后 system.nullable<>
    泛型得到了较好的使用 System.Nullable<int> 中是可以用null表示数据库可中的DBNULL的
    ,system.nullable<datetime>也是一样的...可以用null表示空值,
      从model到数据库的过程中,null也是不能直接用为dbnull的,所以我们采用的方法 是先判断是否空再传
    值,
    system.nullable<int> icardid;
    if(icard.id.hasvalue)
    {
     command.paramater["@cardid"].value=icard.value;
    }
    else
    {
     command.paramater["@cardid"].value=DBNULL.VALUE
    }
    ____________________________________________________
    int icard;
    command.paramater[i].value=icard
    _____________________________________________________
    反过来,就是要判断所读的字段来构造 这个system.nullable<int>的
    测试:
     datareader getint32(i)可不可以读空值呀 如果可以直接生成null的值
        不可以的,不过可以先用isdbnull(i)来检测一下:

    int? i=dr.isdbnull(i)?dr.getint32(i):null;

    让我们用datatable datarow则为
    dr[0] != DBNULL?convert.toint32(dr[i]): null;
    _____________________________________________________

    icard = sdr.getint32(i);
    icard = convert.toint32(dr[i]);

    _____________________________________________________
    这就是model-数据库 技术的全部


    第二节 界面的深入:
       第二部分是model与前台界面的关联:
        model->前台: 
          当string != null \  int? .hasvalue \ datetime? .hasvalue 
                textbox.text = string; textbox.text int.tostring(); |datetime.toshorttime();
    先判断model不为空 再进行绑定  
    dropdownlist -
    先判断model不为空 (判断其中的值不为空-即为有可选项)   再进行绑定


    ******************************************************************************************* 
     
     password,password text,textarea, select-dropdownlisp,listbox, input-
    buton,hidden,checkbox (2, 3, 4)radiobutton
    =========================================================================================
    前台-->model
    textbox -- password --  strName = txtName.Text ; intCard = int.parse(txtCard.text);
    dropdownlist   strName = dropdownlist.selectvalue ;intCard = int.parse
    (dropdownlist.selectvalue);
    这样的意思是可空的string -varchar会被赋与 空字符值 int 保留空值dbnull
    radiobutton checkbox 是这样的了 呵呵

    这一节就到这里吧 ,大家自己回去好好想一想.

    =========================================================================================
      
    大家好 这一节分析 , ①界面的生成-②验证控件- *javascript *绑定数据库的默认值

      我们最常用的有
     
     
      <asp:textbox{text种类} id="txtname"{名称} runat="server" MaxLenth="20"{长度} readonly=true{主键} Width=45{}
      value="" textMode="textbox"{类型}></asp:textbox>
     
       <lxf:inputdate id="txtbegin" runat="server" width=34></lxf:inputdate>

       <asp:dropdownlist id="ddlcatage" runat="server" >
     <listitme select=true> assd</listitme>

       </asp:dropdownlist>

       <asp:label id="label1" runat="server"></asp;label>
       <asp:button id="button1" />


     我也没有想法了.....


     第三节: 混合类 model+idal的优化+存储过程

    在我们看到的这些类中,有一些是已经用过的BASE类 , 另外一些是用的自定义的连接数据库的,连接方法, 这些虽然已经用类实现 ,但是缺乏优化,

    字段 的前缀: 怎么说呢 , 在匈牙利命名法中 前缀是很重要的..但在.net的时代里,前缀i,n,str不是太重要的手段表示字段了,我想这个可以优化一下的.


    清晰的简单的架构是比较易实现的, 所以这一版本中 可以实现 ,伪存储过程的字符串, (petshop4)中的表达方式.
    paramater可以存放:ipara... upara .. 用sqldatareader返回insert的插入后的值,update 错误值

    模块化的设计


    insert - update -deletebypk - deletebyids- selectbypk-selectall-selectbycatagory-selectallbywhere-selectbypage(X,Y)-
    getcount();
    **************************
    getcount_bywhere(string);
    selectbywhere(string,X,Y)

    ***************************

    administrator

    public bool IsExist();
    public bool ChangePwd(old,new);
    public bool Login(name,password);
    public

    user
    ***************************
    假删 -bDelete  &&&&&&&&&&&&&&&&&&&&&   ISDELETED = 0

    NEWS
    增加 public int addcount();     &&&&&&&&&&&&&&&&&&&&&   Count = Count+1
    得到外键: public 从外键中到得集合 &&&&&&&&&&&&&&&&&&&&& ID &&&&&&&&&&&&&&&&&&&&& Name
    [一对多]


    model 从有外键的列中得到类...


    生成器中的model有存储过程对生成器的需求分析:
    model要求全部的列作为生成的对象,并且包括含外键对应的表 (目前为必须设定)
    存储过程对生成器的要求:除了执行model的u i d,外,另外的生成可以自行支配生成器的列选择器.

    视图---- 外连接 --- 生成
    这一部分的生成 , 有待与用用户控件的方式生成:
    技术点:用户控件,事件,DOM
    (今天是2006-11-20 23:20:43 手冷呀)
    代码有向生成方面技术:
      虽然从直观上可以用最简单,最笨的方式生成所希望的代码,但这个过程绝对不是我们所期待的... 而且我们
    会绝不会在只生成这方面停滞, 必然会向重构\代码分析\这一系列的方向展开....

    模型:
    petshop三层建模, 从发展的角度去看,单说建模的技术就是一种技术性很强的东东.

    代码:
      统一命名规则..  就是我们自己所采用的风格..
     

    从模型    -  >     代码
      dom 可以实现 建模技术:  ---writer类--工厂模式
      另类的生成 xml+xslt  总体来说是一种基于高层上的建模技术,效率不可知,但对于底层的掌握不好

    通过简单命令行实现    解释器模式---- 设计模式

    从代码  -   >    模型   ->代码  这也可以看成是一种重构的过程
      可以用编译器实现 -- 编译原理  --技术正则表达式

    **前天分析的编程高手, 一方面是自己独到的见解,别人可能要花上很长的一短时间才能看的明白
     第二方面,是能力的一个方面,就是粒度比较的大,这里并不是说他的整体上是杂乱无章的,而是说
    他的结构是相当的有效,另一方面是指他的代码段从量上说是大的,从含盖的内容上可以是一个不是
    太明晰的结构性的东西,但是却十分有效.(先不知道自己的想法是不是正确 , 我感觉是未来人类的
    一种思维方式,7->14之类的东东.. 单位的复杂粒度变大,细节上的东东,用成型算法)

    在一定程度上的定型: 世界处于一种深度的递归状态,自己的思想也是这样的,递归的过程,是量变
    引起质变的过程, 所以说要把握一个度,一个从量变到质变的度,不可以太快的进行下一个的递归,
    就像是人们必须生产高级汽车后才生产离心飞行器的初版, 我是一个递归很快的人...所以说就忘
    记了细化一些东东,对原有东西的充分吸收.  放慢递归速度,加快积累速度.


      
    2006-11-21 22:38:10
    定死里面的东东 里面的const变量
    rdr : sqldatareader
    command.paramter["@XX"]里面的东东,都是column的原形
    param
    params
    //感觉在程序里改一个方法名 getIpara_order 很是容易,, 但现生成是有麻烦的,因为它需要一个
    //规则支持,, 而现在没有的原因造成的..
    GetIParameters()  : 获取参数
    SQL_INSERT:插入的sql
    SqlIParameter
    //=>:          生成的模型
    strSQL
    sda:sqldataadpter
    私有字段:db.column.tolower
    属性:大写第一个db.column
    页面定义的类: obj
    类的命名:____________________
    参数主键的定义______
    TextBox前缀:txt
    DropDownList:ddl


    星期三 2006-11-22 23:51:55
    今天生成了一部代码生成简版的(单表).
    已经完成的功能有,类主体的生成,insert update delete select all,select by pk,
    基本界面控件,界面与类的互交等三大功能

    ... 功能还有待完善 需要大量的测试,
    就是要做大量的网页后才可以进一步升级, 除了目前测试是最主要的矛盾外,
    系统还有不少的缺陷: 控件类:日期,多选,单选的功能   在测试中完善.............
    系统方法实现太少,  在测试中完善.............
    系统不支持多表,视图,存储过程,   在下一版本中完善.............

    星期五 2006-11-24 23:28:07
    今天测试:
    buglist :
    Datatime ->DataTime   马虎 -------库的原因
    MaxLength 记忆不准确MaxLength
    没有control 脑力不足
    m_content    .     ; ----- 不细心  --欠考虑
    obj.M_datetime.Value.ToShortDateString ..欠考虑
    this.m_id = rdr.GetInt32(0);  重复  没考虑..
     'AND' 附近有语法错误。  程序有问题 bug --考虑-关联 - , 的长度是,但是 and 是5

    命名空间 考虑
    通用类

    命名空间 :可有 可无  可以通过配置参数确定 ------有待实现 >>>>>> 类名
    命名法则:从页面取值,, 不自动生成...
    通用方法 - 私有字段,共有属性, 通用类生成表genTable 提议静态 

    约定  命名空间==string.Empty 就不生成.....


    下一阶段的目标是:
    1.改造select all的属性, 绑定到泛型上  ,列分析清楚
    2. 尝试构造多表model ---
    3. 进行数据库的已有存储过程的掉用 实现方法可配制化,同时可以动态增加方法.先不要
    考虑:反序列等保持状态的问题.

    * 自定义控件的数据库操作 .. 难点.(后期扩展)2006-11-25 2:49:47
    over

    2006-11-25 22:41:32
    发现:用datareader 的时候 return 值 与 output值不能同时返回回来......

    2006-11-26 11:26:33
    睡的真舒服..
    要考虑的东西,
    ① petshop的order是如何插入item的
    ② 生成的数据集是怎么处理 方法类型的 select insert delete等.
    一句话 ,第一步总是用能行的办法实现....
    其实在第几步之前 我想应该是前多实现几种死的常用方法,实现可配置....再进行第二步的实现

    看了一会petshop说实话.和他其实是有一定的差别 从建模方式上差距就很大.


    2006-11-28 22:17:47
    过了两天 ... 开始测试了 ..
    ...少 public ....
    测了不少的BUG呀.. ... 呜呜
    想着快却总是出问题喽.
    ..从整体的角度讲, 自动机有必要生成一些框架结构性的东西,比如App_Code文件夹等等,这就要求有项
    目的考虑方式了.
    现在有两个问题需要考虑 ①就是要建立整体性的方案,如何组织文件管理,是否已经有必要开始建立一个
    新的项目开进行代码的生成.如果是那样的话 ,又应该如何去管理这些文件?
    ②就一些细节而言,如adminM.aspx是否有必要进行模式化的生成,生成的话 需要考虑模型的生成原子粒度
    与采用何用方式生成,就目前而言,小粒度,复杂的模块,采用逐语句生成,但是对于网页页面却不一定的
    试用.采用粒度较大一点的替换,将会提升一定的效率,.....呵呵....有点道理吧......粒度更大的时候
    就采用块块集成的东东(我都不知道是什么了).

       这样的话,就涉及到组织程序框架的问题了,,我打算采用以前的那种方式,总体来说是十分有效的:建立
    模块库,是不能随便改动的..里面有我自己定义的框架模型,程序是基于框架模型再跑动的.....我想就是一个不错的主意,,  有点Xslt的味道了,当然可以用他的框架生成,只是自己的东西随意性比较的大,最好是先按自己的思想一步步发展到和xslt同等程度的思考...
      这时的我回想起了我的codeback程序2005年的时候吧 , 就是采用的这种思想去做的,当时做的还可以,只是到后来考虑到了各种数据的表达形式的时候,就有点不想弄了感觉了..(2006-11-29 1:9:55)
    呵呵,真是有所期待呀, 我想着过不了多久,我的自动机将再进一个新的版本,这个版本就叫V1.1吧,听起来有点熟悉的感觉的,今天就到这里吧。
    任务:
    ①完善生成的后台页面代码
    ②开始进行构建模板库
    ③开始进行项目组织管理(这个到后期的时候 整个系统将改用,Add-in技术实现以技术更多的功能)
    2006-11-29 1:16:07
    [放慢递归速度,加快积累速度]

  • 相关阅读:
    Documentation | AnsibleWorks
    Salt Stack 官方文档翻译
    OSNIT_百度百科
    内心觉得自己会是一个还比较厉害的产品经理,对于新产品的整合上
    知方可补不足~UPDLOCK更新锁的使用
    MongoDB学习笔记~环境搭建
    压力测试~一套完整的压力测试项目文档
    压力测试~测试工具的使用
    不说技术~关于创业一点想法
    HTML5 Canvas 填充与描边(Fill And Stroke)
  • 原文地址:https://www.cnblogs.com/lxf120/p/576298.html
Copyright © 2020-2023  润新知