2005年10月12日

今天做公司的项目,遇到Validate Number,却发现C#居然没有类似IsNumeric()的函数,不知C#的设计者是怎么想的。

只好自己写函数校验Number,在网上看到一些写法,感觉比较好:
static bool IsNumeric(string str) 

System.Text.RegularExpressions.Regex reg1 
= new System.Text.RegularExpressions.Regex(@"^\d+[.]?\d*$"); 
return reg1.IsMatch(str); 
}


支持负数
static bool IsNumeric(string str) 

System.Text.RegularExpressions.Regex reg1 
= new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.]?\d*$"); 
return reg1.IsMatch(str); 
}
 


后来在网上发现了一个开源的C# Project,写好的校验、加密功能,share给大家:
http://www.aspsimply.com/cs/CSTool.aspx

posted @ 2005-10-12 17:27 雨田美文 阅读(1548) 评论(1) 编辑

现在公司的一个美国项目,对用户交换要求特别高,因此,有N多UI。由于我们将事件处理全都写在对应的UI中了,所以UI几乎无法复用,因为每个界面都或多或少有些不同。这个问题也要我闹心了好长一段时间。今天总算想到了一些思路。

对于UI交互非常多的Software,界面操作通常混合了业务逻辑,比较灵活,不好复用,但是表现层的UI却是可以复用的。因此提出一下建议:

1、基于组件设计UI界面,将一个大的UI划分为若干个小的组件。例如,一个主界面上有一个Data Grid和一个显示Detail信息的Panel,那么分别将其封装为自定义组件。

2、利用IoC模式,降低组件之间的耦合性,在运行时,动态注入它们之间的依赖关系。比如实现类似于选择Data Grid中的一条记录,在Detail Panel上显示其详细信息的功能。
    首先Data Grid和Detail Panel之间没有直接的耦合关系,它们谁都不知道谁。抽象出中间层DataGridDetailController,它的作用是动态注入Data Grid和Detail Panel的关系。这里需要一个XML配置文件,该配置文件中记录了Data Grid和Detail Panel的关系以及字段数据的对应关系。DataGridControlller负责从XML配置文件中读取配子信息,从Data Grid中获取selected item,并将对应字段的数据绑定到Detail Panel的对应字段。

    这样,Data Grid和Detail Panel都可以得到最大的复用。而DataGridDetailController也可以得到复用。如果再有这种Data Grid绑定Detail Panel的情况,只需在XML配置文件中添加新的配置信息就能实现目标功能,而无须想现在这样,没碰到这样的情况都再写一次Data Grid绑定Detail Panel的逻辑控制代码。

3、利用IoC模式,降低UI和UI控制的耦合性,实现UI不变,只是UI控制逻辑不同而已,增加UI表现的复用性。一般UI和UI控制的耦合关系是通过事件处理器建立起来的,例如,我们通常会将事件处理函数hard code到UI界面中,因此,一个UI界面通常会有N多个时间处理函数。
    为了降低这种耦合关系,不再在UI界面中hard code事件处理函数,而是将它们移到UI界面以外的另一对象中。再利用IoC模式动态注入它们之间的关系。
    1、首先需要一个XML配置文件,该配置文件配置了哪个UI界面的哪个事件,对应哪个对象中的哪个事件处理函数。
    2、自定义一个Envent Handler,它能够读取XML配置文件,动态注入特定UI界面和特定事件处理函数的关系。
    这样,UI界面只是表现,不直接和业务逻辑相关,能够实现最大的复用。而业务逻辑的修改也变得很方便了,如果业务逻辑发生了变化,只需修改XML配置文件,替换新的对象中的新的事件处理函数。

这种思路的不好之处,可能有几点:
1、对设计和实现者的要求比较高。
2、开发上会比较复杂,毕竟相当于架了好几个中间层。但是,维护成本非常小,灵活性高。这就叫“有所得必有所失”。
3、开发人员可能需要自行开发、或学习使用IoC容器。可以使用现成的IoC容器,例如,Spring、Spring.Net等。

OK,我的思路完成,大家有什么意见可以给我发邮件。leimin3113591@163.com,欢迎交流。

posted @ 2005-10-12 13:51 雨田美文 阅读(1388) 评论(7) 编辑

各位大侠们好,小弟一直有一事不解,为什么在ASP.Net中有都将Validator抽象出来,成为单独的控件,而.Net Windows Form中却没有Validator控件呢?还得我一到Validation时就自己谢代码,太费劲了。

posted @ 2005-10-12 11:51 雨田美文 阅读(212) 评论(0) 编辑

最近,在IoC和AOP思想的影响下,一直在想将业务层抽象处理。

公司里的项目是一个用户交换很强的Software,因此我们的设计就成了以GUI驱动,界面和UI控制,还有业务逻辑混合在一起,维护起来很费劲。

不像大型的J2EE企业应用,现在公司的项目中,UI操作混合了业务逻辑,如何能很好从抽象出业务层呢?因为对UI的操作必然依赖于某个UI,那么就是操作和UI紧紧地绑在一起,无法抽出来。

不知那位大侠能够帮小弟解疑。

为了能够将GUI的操作和业务逻辑抽象出来,我准备先做如下事情:
1、对UI上类似于Button这样的,能够和用户交换的控件,按其功能,进行分类。例如:一些Button是只是GUI操作,它的影响只停留在GUI上,像Add Item等;还有一种是用来访问数据的,例如:“Save” Button。

2、由于UI的操作多少是由事件驱动的,所以想对事件按功能进行分类。

大家谁有好的意见,欢迎交流。

posted @ 2005-10-12 11:33 雨田美文 阅读(247) 评论(0) 编辑