从事.Net开发也有5年多的时间了,之前一直跟着微软的技术方向走,最初的我,用的最多的就是单纯的ADO.NET以及DataTable,最后接触到ORM,又开始用起NHibernate,由此,我开始关注Java方面的开源技术。 在我看来,IoC确实起到了管理好对象的生命周期,但是,从我在上一家公司推广IoC容器的经历来看,我的同事对这种技术不是很热衷,不止一次的像我抱怨,IoC实在是太麻烦了,我需要改接口的定义,改实现类的方法,为什么我不能直接修改类呢?而且我定位也只能定位到接口,而不是真正的实现。 比如: public interface ILog { void Log(); } public class Log : ILog { public void Log() {} } 如果,中途需求变更了,需要在ILog里面新增加一个方法,我得至少修改两个地方。 经历了最近这一年的几个项目的开发,同事纷纷抛弃了这种开发方式,重新回到了new Object的时代。 难道我真的做错了么? 希望高手能为我解惑。。。。。。谢谢。。。。。
posted @ 2010-12-04 11:57 冰隼 阅读(175) 评论(4) 编辑
    MyGeneration 是一款免费的代码生成工具,其强大性和易用性都较为人所称道。
之前一直在使用DDLLY命名空间的模版来生成代码,久而久之就想着自己来写个,所幸,一晚上的奋战,终于搞出个像模像样的东东出来。
    如果还有什么没有考虑到的,还请来往路人指点。

NHibernateMapping
posted @ 2007-05-29 10:42 冰隼 阅读(1488) 评论(7) 编辑

今天在做项目的时候,遇到了一些事务处理上的问题。在MSN群里咨询了DDL这些高手,结合NHB的文档看了看。写了一个小Demo,但是问题还是有不少,还需要进一步改善。。。

public void Add(Test t, string query)
  
{
   ISessionFactoryImplementor sf 
= factor as ISessionFactoryImplementor;
   conn 
= sf.OpenConnection();
            ITransaction nTran 
= null;
   
try
   
{
    
    
// 第一个Session
    session1 = factor.OpenSession(conn);

    nTran 
= session1.BeginTransaction();
    
    session1.Save(t);
    session1.Flush();
    session1.Close();

    
    
// 执行Sql语句
    IDbCommand com = sf.ConnectionProvider.Driver.CreateCommand();
    com.CommandText 
= query;
    com.CommandType 
= CommandType.Text;
    nTran.Enlist(com);
    com.Connection 
= conn;
    com.ExecuteNonQuery();

    IDbTransaction tran 
= com.Transaction;

    tran.Commit();
    
   }

   
catch(Exception ex)
   
{
    nTran.Rollback();
    
throw ex;
   }

   
finally
   
{
    session1.Close();
   }

  }




这里无法同时执行两个Session里方法。

posted @ 2006-11-09 14:34 冰隼 阅读(991) 评论(2) 编辑

今天在项目中遇到一个问题,在页面有多个按钮需要触发的时候,按下回车键会导致触发的事件不对,比如原本想触发A按钮的事件结果跳到B按钮去了。所以,翻了下JavaScript书,写了下脚本,结果恢复正常。
<body onkeydown="if(event.keyCode==13) OnSubmit();">

         function OnSubmit()

         {

                if(event.srcElement.id == "ucJu_txtUserName" || event.srcElement.id == "ucJu_txtPasswd" ||      event.srcElement.id == "ucJu_txtCode")  {      

            getObj("ucJu_btnLogin").focus();   

      }


function getObj(objName) {
      return(document.getElementById(objName));
}
</body>


这其中,在body里要加上onkeydown事件,就是捕捉回车键按下的事件,然后触发下面的JavaScript函数;event.srcElement.id是对应页面里控件的ID,然后把按钮对象获取出来后,把焦点对应到上面即可。

posted @ 2006-09-08 10:20 冰隼 阅读(509) 评论(0) 编辑
自定义服务器控件属性的特性:

Bindable
这个特性表示属性是否可以绑定一个有效数据源。通常使用布尔值进行设置。例如:Bindable(true)。如果使用值true标记属性,表示该属性可以绑定一个有效数据源,且应引发该属性的属性更改通知。

Browsable
指定属性是否应该在属性浏览器中显示,使用布尔值设置。通常情况下,功用属性和那些希望在属性浏览器中显示的属性被设置为 Browsable(true),只读属性和那些不希望在属性浏览器中见到的属性被设置为 Browsable(false)。

Category
指定属性在属性浏览器中进行分组显示的类别。该设计时特性帮助可视化编辑器将属性进行逻辑分组。通常分为:外观(Appearance)、行为(Behavior)、布局(Layout)、数据(Data)、操作(Action)、键盘(Key)和鼠标(Mouse)等。除此之外,还可以自定义分组类别。

Description
指定显示在属性浏览器下方,属性的文字说明。

DesignerSerializationVisibility
指定属性是否以及如何在代码中序列化,其值为DesignerSerializationVisibility的枚举值。存在3种设置方式:DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)指定序列化程序不应该序列化属性值;DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)指定应该允许序列化程序序列化属性的值;
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)指定序列化程序应该序列化属性的内容,而不是属性本身。此字段为只读。.Visible为其默认值。

NotifyParentProperty
指示当此特性应用到的属性的值被修改时将通知其父属性。换言之,如果属性的父属性应该在该属性值改改时接到通知,则向该属性应用NotifyParentProperty特性。通常使用布尔值进行设置。



除了需要熟悉以上设计时特性外,还有一些常用的设计时特性,这些特性声明于包含属性的类之前。通常情况下,它们应用于包含子属性的复杂属性的类的声明过程中,因此在声明复杂属性过程中意义重大,列举如下:
ParseChildren
使用该特性指示当在页面上以声明方式使用控件时,嵌套在服务器控件标记内的XML元素是应该视为属性还是应视为子控件。通常情况下,包含两种声明方式:①ParseChildren(true)表示将子XML元素作为服务器控件的子控件分析;②ParseChildren(bool childrenasProperty, string defaultProperty),其中childrenasProperty和方式①中的布尔值参数意义相同,defaultProperty定义默认情况下将子控件分析为服务器控件的集合属性。

PersistChildren
该特性指示设计时是否应将服务器控件的子控件作为内部嵌套控件保持。如果该特性为PersistChildren(true),则将服务器控件的子控件作为嵌套服务器控件标记保持。如果为PersistChildren(false),则将该控件的属性作为嵌套元素保持。

PersistenceMode
指定如何将服务器控件属性或事件保持到ASP.NET页面的元数据属性。共存在4种枚举设置方式:①PersistenceMode(PersistenceMode.Attribute),指定属性或事件保持为特性;②PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty),指定属性作为服务器控件的唯一内部文本而属性值是HTML编码的,只能对字符串作这种指定;③PersistenceMode(PersistenceMode.InnerDefaultProperty),指定属性在服务器控件中保持为内部文本,还指示将该属性定义为元素的默认属性,只能指定一个属性为默认属性;④PersistenceMode(PersistenceMode.InnerProperty),指定属性在服务器控件中保持为嵌套标记,这通常用于复杂对象,它们具有自己的持久性属性。

DefaultProperty
指定服务器控件的默认属性,例如[DefaultProperty("MyProperty")]。

TypeConverter
指定用做此特性所绑定到的对象的转换器的类型。用于转换的类必须从TypeConverter继承。使用ConverterTypeName属性来获取为该特性所绑定到的对象提供数据转换的类名。
posted @ 2006-05-31 17:36 冰隼 阅读(303) 评论(0) 编辑
今天看了下有关控件呈现的问题。做个笔记,免得遗忘了,就不好了。

DOTNET类库里,服务器控件都继承自System.Web.UI.Controls.Control类,该类提供了Render, RenderChildren,RenderControl等3种方法实现控件呈现。这些方法都使用HtmlTextWriter的实例做为参数,它们允许为一个HtmlTextWriter对象提供服务器控件的内容,并将其内容封装至HTTP输出流中输出到客户端显示。

方法原型:
        protected virtual void Render(HtmlTextWriter writer);
        protected virtual void RenderChildren(HtmlTextWriter writer);
        protected virtual void RenderControl(HtmlTextWriter writer);
实际上3个方法之间存在着密切的关系。下面的代码说明了3种方法之间的联系。
        //RenderCotrol 方法的基本实现
        public void RenderControl(HtmlTextWriter output)
        {
            if(Visible)
                Render(output);
        }

        //Render 方法的基本实现
        public void Render(HtmlTextWriter output)
        {
            RenderChildren(output);
        }

        //RenderChildren 方法的基本实现
        public void RenderChildren(HtmlTextWriter output)
        {
            foreach(Control c in Controls)
                c.RenderControl(output);
        }


上面的代码说明了RenderControl、Render、RenderChildren方法的基本实现,同时也说明了空间呈现的大致逻辑。实际上,控件呈现是一个递归调用的过程,其过程为:
    页面框架建立一个HtmlTextWriter类的实例;
    页面框架将这个实例对象传递给RenderControl方法:
    RenderControl方法检查控件的可视书香Visible是否为true,如果为true,RenderControl方法将调用Render方法;如果为false,则不呈现该控件和其子控件;
    Render方法执行默认实现,调用RenderChildren方法;
    RenderChildren方法按照默认实现中的设定调用每个子控件的RenderControl方法。

以上3种方法中最重要、最常用的是Render方法。空间开发者可以通过重写Render方法完成呈现控件的任务。存在两种方式将需要输出的内容封装入HTTP输出流中。
    ·  调用Write方法。这个方法将直接把需要输出的内容写入字符串中。
    ·  调用HtmlTextWriter类中提供的多种方法和相关枚举来组织需要输出的内容,而不是像Write方法那样直接编写标记文本。
posted @ 2006-05-31 11:34 冰隼 阅读(308) 评论(1) 编辑
摘要: 一、主要开发模式纵观目前市场上成型的公文流转系统,其开发模式上的差别主要体现在系统结构和开发的技术手段,系统结构主要指终端操作人员与应用服务系统的相对关系,开发的技术手段指系统的平台及其主要开发技术。1、系统结构按照系统终端情况的不同,可将公文流转系统的开发结构分为B/S(浏览器/服务器)和C/S(客户端/服务器)两种模式,它们各具特色,是当前公文流转系统开发的主流。(1)B/S模式B/S 模式的...阅读全文
posted @ 2006-04-03 16:03 冰隼 阅读(1240) 评论(0) 编辑
摘要: 观察者模式探秘在面向对象编程中,开发者越来越注重以前的代码的可重用性和可维护性。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。今天我们来理解一下观察者模式(Observer Patterns)。观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自...阅读全文
posted @ 2005-11-07 20:50 冰隼 阅读(753) 评论(0) 编辑