步步为营 .NET三层架构解析 六、BLL的设计
BLL层,又叫业务逻辑层,顾名思义,就是放置业务逻辑的地方.
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计
http://www.cyqdata.cn/cnblogs/article-detail-35647
步步为营 .NET三层架构解析 五、DAL与IDAL的设计
IDAL:数据访问层接口,接口是一种系列‘功能’的声明或名单,接口没有实现细节.
DAL:数据访问层,主要用来做数据逻辑处理,具体为业务逻辑层或表示层提供数据服务。
先来看下IDAL的设计:
ICustom.cs
public interface ICustom
{
/// <summary>
/// 添加一条记录
http://www.cyqdata.cn/cnblogs/article-detail-35582
【讨论】关于数据实体层的设计
今天与同事一起讨论了2种数据实体层的设计方案哪个比较好的问题,只有讨论,虽然心里有所倾向但是没有答案。
先介绍下两种设计,其实很简单,方案1是参照NetTiers的强类型设计继承自Object自己实现相应接口;
方案2是弱类型设计,实体继承自DataTable;两种方案都是一
http://www.cyqdata.cn/cnblogs/article-detail-35076
ASP.NET MVC & EF 构建智能查询 二、模型的设计与ModelBinder
在第一篇中,我讲解了我们要做智能查询的原因,以及基本的解决方案设计。从这篇开始我们开始讲解它的实现过程。
其实在写这一系列文章之初,我其实是想由底至上去讲解,但是我又整理了一遍代码才发现,其实如果不了解最表面的东西,也是不太好深入的。
所以我们的第二篇文章就来讲一下我们这个智能查询框架中最浅,但也是使用最频繁的部分,也就是Model。
首先我们的Entity 或者说数据库的结构如下
http://www.cyqdata.cn/cnblogs/article-detail-10013
QQ批量自动登录程序的设计
因为自己的QQ号码有好几个,每次重启机子的时候一个一个的登录超级麻烦,而且腾讯老是在偶尔的时候,再把以前已经记住密码的QQ密码给置空,还要重新输入,太麻烦,因此尝试着自己搞一个批量自动登录的程序
以TM2009为例,查看了一下,未登录之前一个窗体,上边两个控件,登录以后,窗体捕获到一个控件,根据这个,首先找到QQ的登录框,输入用户名,密码的位置,获取窗体句柄的具体代码如下:
这里先定义了一个record类型,
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 TQQWnd= record2 QQWnd,QStatusWnd: HW
http://www.cyqdata.cn/cnblogs/article-detail-2286
浅谈缓存的设计与使用注意项(上)
memory cache + backing store enterprise libiary中的caching block 在微软pattern&practise团队发布的enterprise library5版本中带有一个caching block,这个缓存块为我们提供了缓存数据大一些列方法。其架构如下图(这里再说明一下:caching block以后会被整合进.net framework之中,enterlib5的后续版本会将caching block剔除): caching block采用的是“内存缓存+backing store”结构(不过backing store是可选的),程序启动时缓存被加载到memory cache,也就是进程内存中(具体有两种加载策略,positive和reactive),当我们通过key调用对应的缓存项时首先在
http://www.cyqdata.cn/cnblogs/article-detail-2245
浅谈缓存的设计与使用注意项(下)
缓存的加载策略--Proactive 和Reactive proactive的策略就是一开始就将所有backing store中的数据加载到进程内存中,这样做的好处是在数据量相对不大的时候会显得很有效率,无需频繁的访问backing store调出数据,并且也不用再代码中判断缓存中是否缓存有数据,是否要从backing store中加载。 reactive策略是“按需加载”,在程序初始化阶段仅加载必要的数据到内存缓存起来,其余数据只有在需要时才从数据库中调出再缓存。这种策略比较保守,缺点是在数据量比较大且频繁访问之初由于要多次频繁的向backing store获取数据,但通常我们使用这种的就是这种策略。 下面是两种方案的示例代码比较:proactive的方式Code highlighting produced by Actipro CodeHighlight
http://www.cyqdata.cn/cnblogs/article-detail-2234
silverlight游戏设计(四)角色/精灵篇之 -- 精灵的设计
精灵的呈现基础 silverlight的那套api并不是一个为游戏设计的,你找不到现成的”精灵”相关的类。 最简单的精灵用一个Image就可以充当,但游戏中总是存在各式各样的精灵,不同精灵又有不同的逻辑,为了方便设计我们有必要定义一些接口。 呈现器接口—IPresenter IPresenterCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->namespace Sopaco.Silverlight.GameFramewrok.Sprite{ /// <summary> //
http://www.cyqdata.cn/cnblogs/article-detail-2184
一个.net客户端通讯框架的设计(二)---准备FastBuffer和BOConverter
在网络编程中,我们会频繁用到两个东西,一个是buffer。一个是bit-order。把数据填充到buffer中,然后通过buffer读写我们所需要的基本数据,还好.NET为我们提供了BitConverter这个非常好用的util,方便我们编写自己的Buffer和字节序转换器。 IBuffer 通常Buffer会有如下几个概念;position,limit,capacity,flip,mark,reset,free position:即将读/写的位置 limit:有效读/写的极限位置 capacity:buffer的最大长度 flip:limit设为置position,position设为0 mark:记录当前的position,对应reset操作 reset:将position设置为之前mark的位置 free:将缓冲标识为空闲,可在入池前调用。 比
http://www.cyqdata.cn/cnblogs/article-detail-258
个人管理:从昨天的一个设计评审来谈如何与人交流你的设计思路
昨天项目组进行了一个设计评审,主要是对OpenExpressApp的AutoUI部分进行重构,我相当于评审人。大家也可以把这个评审过程当做与人交流你的设计思路的一个过程,以下从我评审的一些要素来谈谈与人交流设计思路时需要考虑的内容,也许对大家在实际工作中的架构、设计和沟通都有所帮助。
评审并不是审判,你直接说出结果之后,然后等着判官下笔,评审一定是基于特定主题进行的,所讨论的东西都围绕这个主题,那么如何让人先清晰你的这个主题是需要考虑的。对于不同人来说,每个人关注视角不一样,所以还需要针对这个主题,对于不同场合、不同参与者,你需要使用什么方式来讲哪些内容才能够让参与者都清晰。
影响我评审关注的一些观点
技术是为业务服务的,再考虑技术时一定需要想想为实际业务做了什么
你清楚的别人不一定清楚一般自己做的设计会觉得很简单,可维护很好,但是没有做过的人理解起来很可能是相反的
你觉得简单的别人
http://www.cyqdata.cn/cnblogs/article-detail-229