上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 之前已经写了一篇关于其中Command模块的重构:《OEA中AutoUI重构(1) - Command自动生成》。Command自动生成的重构作为本次重构的一个“前锋战”,尝试用OO的方式把原来的过程式的界面自动生成流程进行优化,以支持更好的可扩展性。Command自动生成较为独立,所以就单独先进行了重构,目前重构已经完成,效果较好:和原有系统完成兼容,同时插入了更多必需的扩展点。 本次重构主要... 阅读全文
posted @ 2010-12-17 15:17 BloodyAngel 阅读(1450) 评论(1) 推荐(3) 编辑
摘要: 现象 这个月我的工作任务中,有一项是重构OEA框架中的AutoUI部分。这个任务在月初时计划在一个月内完成,包括问题分析、设计新的结构、编写设计文档、开展设计评审、代码实现。原计划半天到一天的评审会议,最后花费了大概一天半的时间。接下来,我就评审会议中出现的问题进行一下总结。 本次AutoUI设计是我到公司以来,觉得最有挑战的一次工作。 会议之前,我和组内的人员进行了多次沟通,了解他们的需求:我们的AutoUI框架当前有些什么问题?当界面需求被提出后,我们对它的完成情况怎么样?开发人员对AutoUI有什么期望?测试、需求人员对AutoUI有什么期望?布局有什么问题?期望的GIX4界面是什么 阅读全文
posted @ 2010-12-14 16:39 BloodyAngel 阅读(979) 评论(3) 推荐(2) 编辑
摘要: OEA框架的核心之一是AutoUI,其职责是面向领域模型及UI元模型进行生成统一的界面。 在本次的迭代开发中,需要对命令按钮的生成方式进行一些定制。由于原来并没有为这样的需求留有特别的扩展点,加之原来的生成代码是过程式的代码、且也变得比较冗长,所以我们决定对这一部分的代码进行重构。 原来的模式 历史代码中,为某一实体类生成命令按钮的流程是这样的: 找到实体类可用的所有命令按钮元数据。 对它们进行过滤,依靠权限、版本的客户化元信息等。 构造几个生成控件的List容器,分别是:itemsInToolbar,itemsInContextMenu,itemsInGroup。 遍历所有的命令按钮,根据. 阅读全文
posted @ 2010-12-10 16:19 BloodyAngel 阅读(1809) 评论(0) 推荐(3) 编辑
摘要: 本篇博客简单描述了Repository模式在OEA中的应用。 不使用Repository时的问题 OEA框架中使用了DDD的思想,面向领域对象进行开发。在DDD中,有很多重要的概念,例如:聚合实体对象、值对象、仓储、工厂、服务等。(不太了解的Repository和DDD的朋友,可以看Evans写的《Domain Driven Design》。) 在OEA中,实体的实现框架使用了CSLA分布式框架。原来为了简单并保持和CSLA开发模式的兼容,一直都把实体的获取模式直接以静态方法的方式直接写在实体的对应列表类中。例如下面这段代码: 随着应用的慢慢深入,出现了一些问题: 不易支持客户化。OEA 阅读全文
posted @ 2010-12-09 11:17 BloodyAngel 阅读(2219) 评论(2) 推荐(5) 编辑
摘要: 项目组目前开发的基于OEA框架的GIX4项目,本次功能已经完成得差不多了,本次迭代的目标主要是提升产品的性能。由于GIX4是C/S结构的应用程序,所以决定实现缓存模块来提升高繁数据访问的缓存。 本篇文章主要介绍了OEA框架中的缓存模块设计与一般的缓存有什么不同,如何在OEA框架中实现缓存模块。分为以下几个小节: 一般缓存介绍 OEA缓存目标 概要设计 通用缓存框架的详细设计 OEA中集成Cache的详细设计 小结 一般缓存介绍 网上介绍缓存的文章比较多,在这里我就挑点重点说一下。 缓存是信息系统软件硬件设计中常用的设计方法:从底层硬件的CPU结构中的多级缓存,到软件中操作系统中内存 阅读全文
posted @ 2010-11-29 15:02 BloodyAngel 阅读(2814) 评论(3) 推荐(8) 编辑
摘要: 以下,我使用一个实例,分享一下用于简化泛型API设计的小技巧,“如何在泛型方法调用时,过滤掉可以隐式推断出的泛型参数”: 原有设计: 系统中原来有这样一个静态的泛型API:使用方法:可以看到,该方法虽然可以从参数中隐式推断出 P 的具体类型,但是无法推断出 T 的具体类型,所以需要显式指定T的类型。由于语法特性的问题,我们不能使用RegisterPropertyUser(e = e.Code)的方法来只传递一个泛型参数给API;导致在使用该方法时,不得不把所有的的泛型参数都显式指定,也就是上面的使用方法。灵光一现: 如何做到不传递第二个泛型参数呢?在N天之后,发现了以下这个方法可以简化 阅读全文
posted @ 2010-11-22 10:00 BloodyAngel 阅读(2788) 评论(5) 推荐(4) 编辑
摘要: 最近在学ASP.NET MVC,画了一些图,和大伙分享下:Routing 组件图1 独立的ASP.NET Routing组件MVC-Controller图2 Controller结构图3 Controller中可用的ActionResultMVC-View图4 使用的抽象工厂模式的视图引擎图5 视... 阅读全文
posted @ 2010-11-19 09:24 BloodyAngel 阅读(7418) 评论(12) 推荐(8) 编辑
摘要: IT 人应具备的一些素质 设计杂谈 WPF框架使用有感: 不熟悉框架的时候,使用框架写出来的上层代码很多都是无用的、杂乱的,这也正反映了底层知识的不足。 随着不断的学习深入,逐渐地对这些上层代码进行重构。每一次精简,都是对底层知识的积累。 忽然有一天,你发现代码被重构得非常简练了,其实也会发现原来基 阅读全文
posted @ 2010-11-18 08:38 BloodyAngel 阅读(1363) 评论(0) 推荐(4) 编辑
摘要: “After a storm comes a calm.” — Matthew Henry 本篇文章翻译自《http://sourcesofinsight.com/2010/08/15/day-15-achieve-a-peaceful-calm-state-of-mind/》。 你的结果 经过本次课程和训练,你将可以把你的思维从混乱中摆脱,让你的大脑保持在一个清醒、放松、敏锐的状态。 什么是大脑的最佳状态 回忆一下,曾经在什么时候,你大脑是你认为的最佳状态呢? 首先,你的大脑是干净的、清澈的,就象第一次看见遥远的山谷一样,你所想的事都非常清晰,不会想一些多余的事情。 其次,你的大脑在 阅读全文
posted @ 2010-11-17 12:28 BloodyAngel 阅读(2388) 评论(2) 推荐(6) 编辑
摘要: 本篇反思总结了一般的学习过程。掌握学习的方法,可以让你更高效地进行学习。这对于天天要学新技术的IT人员来说,是非常重要的。 本文反思了自己学习WPF过程中出现的一些问题,然后对以后学习的方法进行了重新设计。 本文的主要内容: 与学习相关的哲学思想原来的学习方案设计工具的反思没学好的原因新的方案 相关 阅读全文
posted @ 2010-11-15 11:23 BloodyAngel 阅读(4060) 评论(7) 推荐(9) 编辑
摘要: 前两天在另外一个部门学习了他们的系统架构和框架。下面是自己在张上画的结构图: 阅读全文
posted @ 2010-11-09 11:47 BloodyAngel 阅读(567) 评论(1) 推荐(1) 编辑
摘要: 此文属转载,原文链接:http://www.cnblogs.com/viter/archive/2010/11/03/1868377.html正文如下:我承认,这个标题很沉重。我有幸使用了一个开源的项目作为小范围内的二次开发应用。这个项目其实是挺大的,开源代码仅是其中一部分,在二次开发中我对源代码作了一些改进,都是一些必要的改进以及发现的BUG;这些BUG在后续的开源参与者一一修复。我想说的是重构... 阅读全文
posted @ 2010-11-09 08:40 BloodyAngel 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 前不久学习了《EFCachingProvider》,该扩展包不但可以用于EntityFramework的扩展,所有与数据库连接相关的应用程序都可以使用类似的方案进行扩展。今天做个小的总结,以方便以后回顾。 总体描述 关于EFCachingProvider是什么及如何使用它,请看园子的这篇文章:《 Entity Framework 缓存处理与日志监控 》。我主要说一下内部代码实现的原理机制。 园子文章的图中,画出了EFCachingProvider所扩展的位置: 也就是说,EntityConnection不是直接使用SqlClient中间的SQLConnection,而是通过... 阅读全文
posted @ 2010-11-08 16:55 BloodyAngel 阅读(3977) 评论(8) 推荐(3) 编辑
摘要: “Life is not measured by the number of breaths we take, but by the moments that take our breath away.” — Hilary Cooper 生命的意义不在于你花了多少时间,而在于生命中有多少让你屏住呼吸的时刻。 你的结果 注意!经过本次训练,你将会成为一个&#... 阅读全文
posted @ 2010-10-24 17:59 BloodyAngel 阅读(1834) 评论(7) 推荐(5) 编辑
摘要: 这次总结一个个人认为的反模式:“绑定子类的泛型层基类”,这个模式在一些著名的框架中也见到过,如果CSLA、BlogEngine。我自己在原来的写的框架中,也用到过。 当然了,个人认为是反模式,各们同仁并不一定这样认为,仁者见仁,智者见智了。不过我好几次都是受尽折磨,所以决定写出来给大家分享下心得。 模式介绍 “层基类”是MF提出的一个基本模式,详见:《Layer Supertype》。这种模式在经典的层次型架构设计的实现中,是极其重要的。我相信,大家一般在做三层架构时,不可能不给出基类的。至少我没见过。:) .NET2.0推出后,带来了新的语言特性:《泛型》。它实现了类型的运行时... 阅读全文
posted @ 2010-09-28 14:52 BloodyAngel 阅读(3469) 评论(21) 推荐(4) 编辑
摘要: 本篇主要描述GIX4项目中如何把单独的模块设计为一个“插件”,如何把它组装到系统中。至于为什么加引号,之后会有说明。 原理 在基于产品线开发时,7,2,1的产品功能分类中,20%的功能是需要在产品线主干中包含进来的。这些功能一般会被设计为“可选包”。在某一客户版本产品的装配阶段,在“可选包”集合中挑选需要的功能,进行组装,得到最终的产品。具体内容,见:《软件产品线工程方法:如何在OpenExpressApp做客户化工作》。 在基于OpenExpressApp框架的GIX4项目中,“合同”模块就是属于这20%的功能,它被设计为独立的DLL,在产品装配时为需要的客户进行装配。 DLL间的关系 项. 阅读全文
posted @ 2010-09-28 10:11 BloodyAngel 阅读(2155) 评论(4) 推荐(4) 编辑
摘要: 上篇 已经就客户化的整体方案进行了叙述,这次主要是说明一些细节部分的设计。 类型的视图元数据 基于OEA框架的GIX4项目中,客户化工作主要是对各客户版本中类型的视图信息进行定义。下图是包含这些类型的类图: 图1 客户化API中的类型视图元数据 属性继承 在应用程序定义中,需要支持继承类型的视图信息定义,也就是说,在基类上定义的视图信息,子类在没有定义的情况下,直接使用基类的定义;当然,也可以为具体的子类做特殊的定义。 但是,TypeViewInfo是某一个实体类型的视图信息,它只对应唯一一个Type。所以要支持继承定义,需要做一些特殊的处理。 一种方案是为所有TypeViewInfo建立父. 阅读全文
posted @ 2010-09-26 10:32 BloodyAngel 阅读(1954) 评论(0) 推荐(3) 编辑
摘要: 这篇文章还是对工作内容的总结,主要是总结一下这几天做的产品的客户化工作内容。 关于产品线工程中客户化的理论知识和概念,请见金根的《产品线工程》。具体的,OEA框架中的客户化理论,见:《软件产品线工程方法:如何在OpenExpressApp做客户化工作》。 本文主要从以下几个方面来叙述如何在OEA框架中设计和实现客户化框架: OEA客户化框架设计目标 方案设计 具体实现 设计目标 支持实体类的扩展。 支持实体扩展包的动态加载。 支持界面扩展及界面扩展包的动态加载。 各版本间自定义界面元素,可以基于现有的特定版本修改一些内容。 各版本间支持自定义内容文件,如果没有使用,则使用默认版本的内容文件。. 阅读全文
posted @ 2010-09-20 20:37 BloodyAngel 阅读(2802) 评论(5) 推荐(4) 编辑
摘要: 1.建立udl文件可构造连接字符串。 2.完全控制GAC文件目录 3.清除数据库日志文件 BACKUP LOG [STS_pcc-server_1] WITH NO_LOG--收缩数据库DBCC SHRINKDatabase('STS_pcc-server_1') 4. SQL Server数据库的 阅读全文
posted @ 2010-09-13 16:44 BloodyAngel 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 最近在看《软件架构师教程》,今天就第五章《软件架构设计》总结一下,其中还有自己所联想到的。主要从以下几个方面来描述: 软件架构ABSD架构模式DSSA架构评估软件架构 架构的定义,在业界,目前主要分为两类:结构派 和 策略派。结构派认为架构是指软件中各构件的组织结构以及各构件之前的相互关系。策略派认为软件的架构设计是要为软件的每个重要的决择进行权衡,并作出最终决定。 架构,作为系统中最重要的组成部... 阅读全文
posted @ 2010-09-13 09:59 BloodyAngel 阅读(1137) 评论(0) 推荐(0) 编辑
摘要: 最近,GIX4项目需要开展客户化工作。同时,下一期sprint中,客户还要求大幅度提升产品的性能。针对所存在的问题,开发人员决定开一系列的技术讨论会。 我总结了目前遇到的和可能遇到的问题:客户化: 实体类客户化 各客户对同一产品表现出的需求,要求实体类在一定程序上各不相同。这就需要领域模型做到可以客户化。 界面客户化 需求不同,界面自然也需要客户化。这是一般性需求。性能: 实体类优化 目前系统使用的是基于CSLA对象模型的实体类。由于使用了CSLA托管属性,性能比较差。同时,由于一个聚合类往往通过多个多层的实体类聚合而成,调试时却都是在调试CSLA的基类,基类中为所有实体类使用同一种模式进行. 阅读全文
posted @ 2010-08-30 20:31 BloodyAngel 阅读(633) 评论(0) 推荐(3) 编辑
摘要: 最近系统学习了一个系统可靠性及其相关知识,今天在这总结一下。 首先,什么是系统的可靠性呢?系统的可靠性是指在规定的时间内及规定的环境下完成规定功能的能力,也就是系统的无故障运行概率。 我会从以下几个方面来归纳主要内容: 1. 故障模型 2. 可靠性模型 3. 可靠性指标 4. 可靠性设计 故障模型 系统故障是指硬件或者软件的错误状态,一般引进故障的原因是这些:部件的失效、环境的物理... 阅读全文
posted @ 2010-08-16 15:39 BloodyAngel 阅读(4713) 评论(1) 推荐(3) 编辑
摘要: 问题描述 今天测试人员提了一个易用性的BUG,主要是说系统目前使用的树型控件不支持自动扩张列的宽度。其实客户那边已经对这个问题提了多次,不过由于对WPF只是入门级,所以一直都没改。这两天项目比较闲,就花了些时间把这个问题改了。原问题如下: 图1 问题描述 背景 树型控件在GIX4系统中已经被大量使用。这个控件是一年前其它同事在网上搜索到,再引入的。 一开始的时候,要解决这个问题,想到的最... 阅读全文
posted @ 2010-08-05 17:58 BloodyAngel 阅读(4384) 评论(6) 推荐(7) 编辑
摘要: 前面已经把原理都讲了一遍,这篇主要是给出一个应用的实例。该实例取自GIX4,比较复杂。 领域模型: 领域模型间的关系,如下: 右边模型链的具体关系在《第二篇》中已经描述过,不再赘述。 本次重点在于红线框住部分: Project:表示一个建设项目; ProjectPBS:一个项目下包含的很多PBS; PBSPropertyValue:一个PBS我们可以为它设置多个值,每一个值对应一个PBSType(模板)中已定义的属性,值的范围也是只能在属性中已定义的可选值中进行选择。 对应的UI如下: 聚合SQL应用: 首先,从应用来考虑:当用户到这个界面时,首先显示的是左边那个Project(项目)的列表. 阅读全文
posted @ 2010-07-07 18:11 BloodyAngel 阅读(2948) 评论(0) 推荐(4) 编辑
摘要: 前篇说到了使用异步线程来实现数据的预加载,以提高系统性能。 这样的操作一般是在客户端执行,用以减少用户的等待时间。客户端发送多次异步请求,到达服务端后,如果服务端不支持多线程处理操作,线性处理各个请求,必然导致客户端的异步请求变得没有意义。 大家肯定会说,谁会把服务端设计成单线程的啊,那不是明显的错误吗?是的!但是我们的系统使用了CSLA来作为实现分布式的框架,而它的服务端程序却只能支持单线程……这个问题我们一直想解决,但是查过CSLA官方论坛,作者说由于GlobalContext和ClientContext的一些原因,暂时不支持多线程。火大,这还怎么用啊!无奈目前系统已经极大地依赖了这个框. 阅读全文
posted @ 2010-07-01 15:45 BloodyAngel 阅读(4265) 评论(7) 推荐(4) 编辑
摘要: 本节说一下数据的预加载。这节的内容与SQL没什么关系。主要说的是在 GIX4项目 中,我们是如何设计符合需求的预加载类库的。内容如下: 什么是预加载,为什么要用它? 我们所需要的API 一个简单的例子 什么是预加载? 预加载其实就是在真正开始使用数据之前,先异步把数据加载好,等到需要使用时,就可以直接使用之前加载好的数据。这时,由于数据已经加载完成,而不用等待漫长的加载过程,所以程序的速度得到一个明显的提升。 那么,什么时候需要使用它呢?我觉得,主要是这种情况:当我们可以预知程序接下来的步骤中,很可能会用到一些数据,而获取这些数据的操作比较耗时的时候,我们就可以使用预加载的方式,提前把数据准. 阅读全文
posted @ 2010-06-30 20:30 BloodyAngel 阅读(3738) 评论(2) 推荐(6) 编辑
摘要: 本节主要介绍,在GIX4系统中,如何应用上篇讲的方案来改善性能,如果与现有的系统环境集成在一起。大致包含以下内容:SQL的生成映射-数据读取方案工厂方法-接口的命名约定实例代码SQL生成 GIX4系统中的所有领域模型及分布式访问机制,使用CSLA作为底层框架。而ORM机制,使用了一个非常轻量级的开源代码LiteORM实现。模型类的定义,采用以下的格式: 可以看到,在类的元数据定义中(这里目前使用的是Attribute的形式),已经包含了对应数据表和列的信息。所以为SQL的自动化自成提供了一定的支持。 其实,由于目前对性能要求比较高的模块少,所以用于优化查询的SQL主要还是依靠人工手写。但是 阅读全文
posted @ 2010-06-25 18:44 BloodyAngel 阅读(1912) 评论(0) 推荐(2) 编辑
摘要: 本篇主要讲如何使用一句较复杂的SQL来加载整个聚合对象,以达到最小化数据库连接次数。主要是解释其中的原理。 LazyLoad及其缺点 相信越来越多的人已经开始使用富领域对象进行领域/业务层的实现了。而目前主流的数据库依然还是关系型的。这中间的转换,我们叫它ORM。ORM的设计中,有一个常用的模式叫作“延迟加载(LazyLoad)”。基设计思想大致上是说,不要把所有的数据都加载进内存,而是等到真正要使用数据的时候,再把它加载进内存。 例如以下这个聚合对象: (为了和后面的代码保持一致,这里面使用的是GIX4项目中真实的类,可能会带有一些领域特性,望读者见谅。后面可能会继续使用此例,现大致对其 阅读全文
posted @ 2010-06-25 16:32 BloodyAngel 阅读(3947) 评论(9) 推荐(2) 编辑
摘要: 最近一直忙着学2010、WPF、看架构师教程、学英语,搞得都没时间写博客了。 最近在GIX4项目上做了一些性能方面的优化,为了方便和同事们分享经验,今天准备把一些相关的小技巧都写一下。这几个技巧并不难,也不是说设计得多好,而是我觉得它们很重要。记得我在做上一个Web系统时,也支持OO的业务富模型,其中大部分不太要求性能的场景中,我使用了LINQTOSQL来实现数据访问。而性能要求比较高的场景中,又使用了人工SQL来进行数据访问。但是在两种方式中,在对数据访问进行优化时,都使用了同样的方法。今天,在GIX4中又再次使用同样的方法。 可见,在面向领域模型进行编程的应用程序中,这样的优化方案可能会. 阅读全文
posted @ 2010-06-23 20:02 BloodyAngel 阅读(786) 评论(3) 推荐(0) 编辑
摘要: 时间 2010-4-21 反思主题语 杜拉拉——表现力 现象与案例 rose作为行政经理,自认为早应该得到升迁的机会,但迟迟没能如愿以偿。恰逢装修大任,rose此事选择病休的方式让li来考量其价值。拉拉作为新人,主动挑战担当此任,经过一番付出和努力,圆满的完成任务。而在大功告成之际,公司总裁来访的时候,rose又出现在岗位带领参观,大得其彩旁白:一个人在职场没有选择对的事情做对了很惨,同样吧对... 阅读全文
posted @ 2010-06-02 09:20 BloodyAngel 阅读(321) 评论(0) 推荐(0) 编辑
摘要: BloodyAngel(9474649) 11:24:33问下override的问题: 在C#中,基类如果定义了一个只读了属性,如:class Parent{public abstract string Name{get;}} 子类Child中,如何把这个属性扩展为可写的?如:public override string Name{ get{return this._name;} set{th... 阅读全文
posted @ 2010-05-07 11:34 BloodyAngel 阅读(323) 评论(0) 推荐(0) 编辑
摘要: I have wrote a article which describes how to deal with a complicate data structure “sortable tree”. See here.As i said, it is so complicate that cann’t be maintain easily.Now, i have found a new fluent way to sort this tree:”Sorting by Double”.“Sorting by double “ is more convinient than int, becau 阅读全文
posted @ 2010-04-28 14:17 BloodyAngel 阅读(357) 评论(1) 推荐(0) 编辑
摘要: 反思主题 控制自己的习惯 现象/案例 常常制定计划,但是到了预定时间时,却得不到很好的实施。计划一拖再拖。 反思内容 综合起来说,觉得执行力比较差!执行力差的原因,有很多。例如以往形成的一些旧习惯在作怪;又如暂时性的懒惰、拖拉;还有一些突发的客观问题。其中,很难改掉一些坏习惯,是我最大的问题。习惯的养成,就象是在缠电线丝,一次缠很细的一根,隔不了多久,你就会发现已经是厚厚的一匝!但是,改掉已经... 阅读全文
posted @ 2010-04-15 11:11 BloodyAngel 阅读(302) 评论(2) 推荐(0) 编辑
摘要: Scrum是敏捷过程中比较著名的一个过程框架,被很多团队采用。Scrum使用迭代的开发方式,每一次迭代中,都会经历一个“计划->实施->验证->反思”的过程。这是一个开发过程,同时也是一个对项目的认识过程,这样的设计其实也是遵循了哲学的认知论.名词解释:Sprint:每一次迭代称为一个Sprint。... 阅读全文
posted @ 2010-03-25 16:44 BloodyAngel 阅读(9499) 评论(24) 推荐(8) 编辑
摘要: 用户在使用GIX4某模块的过程中,内存只见加不见减。我们怀疑出现了内存泄漏,所以我花了相当一段时间来进行此问题的排查。 我使用Red Gate公司的产品ANTS Memory Profiler 5进行应用程序的内存进行监视。并在过程中修改程序中出现的一些问题。但是最后留下一个不知道原因的引用,如图1: 图1 泄漏对象引用图 由图中可以看出,Application.Resources永久地引用了... 阅读全文
posted @ 2010-03-25 14:16 BloodyAngel 阅读(2532) 评论(9) 推荐(3) 编辑
摘要: 上次随便画了一篇关于GIX4项目目前的类的结构图(见:GIX4 目前大致的类结构),目的是为了更好的认识系统,并对其进行改进。发现AutoUI部分的耦合性比较大。所以提取了一个IUIFactory的接口,并用同事推荐的EA重新画了一下目前系统的图,如下: 图1 框架包图 图2 实体元数据 结构图 图3 逻辑视图(ObjectViews) 结构图 图4 命令结构图 图5 列表编辑器(ListEditors) 图6 属性编辑器(PropertyEditors) 图7 列适配器(Columns) 图8.1 视图控制器(1) 图8.2 视图控制器(... 阅读全文
posted @ 2010-03-22 12:31 BloodyAngel 阅读(2429) 评论(4) 推荐(3) 编辑
摘要: 项目做了半年了,一直没把结构图画下来。为了方便以后更改和添加新功能,现在先把里面比较重要的类的结构一起画下来。暂时先用着: 阅读全文
posted @ 2010-03-18 13:38 BloodyAngel 阅读(1086) 评论(1) 推荐(1) 编辑
摘要: 现象/案例 自从换了手机以后,一直使用手机进行学习,包括博客、文章、电子书。这样做是为了利用起“边角时间”。但是慢慢地,这种方式就走向了极端,而成为了我学习知识的主要方式。 反思内容 我使用这样的学习方式已经学习了好几个月了,看了很多书,但是并没有感觉到有多大的收获。和原来的学习方式相比,获得的效果差得比较远。 和穆江星的聊天中,他向我解释了“厕书”的概念。结合自己的实践,我认识到,不是所有... 阅读全文
posted @ 2010-03-15 12:26 BloodyAngel 阅读(548) 评论(2) 推荐(0) 编辑
摘要: 原来就想写一些关于分布式的设计。正好目前开发的GIX4项目中,需要对客户端的许多操作进行记录。这个功能的设计或多或少能说明,一般情况下,多层的分布式系统应该如何设计。现在我就对这个功能进行描述。功能描述 GIX4项目中有个审核日志记录功能,它需要以下功能: 需要把客户的所有操作记录下来,以便支持审计。如,当用户进行:登录、打开模块、查看数据、点击按钮……等操作时,把相关的数据全部在服务器的数据库中记录下来,这些数据有:操作类型、操作时间、操作内容、操作者、客户端机器名等。 在服务端对某些特定的事件进行记录,如:计算出错。设计目标 这个模块需要支持以下目标: *为客户端代码、服务器端代码都提供. 阅读全文
posted @ 2010-03-10 12:58 BloodyAngel 阅读(5271) 评论(4) 推荐(2) 编辑
摘要: 本篇博客记录了我在工作过程中的一个设计单元。 需求 GIX4项目中需要为非国标清单进行匹配,用户自定义匹配规则。规则可以被存储到数据库中,下次重复使用。界面原型如下: 图1 界面原型 用户可以指定对对象的某属性进行某个比较操作。 设计-总体结构 图2 总体结构 看上去会有点晕?懒了一点,就全画一起了。 :o) 中间的接口就是整个结构的核心所在,下面会详细解释: 第一组接口:设计匹配概念 首先,明确匹配的概念,这个概念是与GIX4应用无关的。 一个是可以被匹配的对象,另一个则是主动匹配者。如下:/// <summary>/// 被匹配的对象/// </summary>pu 阅读全文
posted @ 2010-02-05 19:47 BloodyAngel 阅读(1344) 评论(6) 推荐(3) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页