Implementing DDD Practice - Timesheet

这是我们DDD workshop的作业,仅供练习。

案例1. 一家咨询服务公司的Timesheet系统

需求

1) 公司的所有员工能够登陆到系统填写每周工作的时间、内容。
2)公司有两部分员工,一类是办公室人员,一类是咨询人员;
3)咨询人员是为某个项目工作,在每个项目里的角色不尽相同;每个项目的Timesheet要求也不同,根据角色的不同有不同的定义,比如开发人员要求填写工作的story号等。每个项目的PM可以批准项目成员填写的Timesheet内容。
4)办公室人员的工作是与办公室的事情相关,有很多的工作项目,每个办公室要求的内容不同。每个办公室经理可以批准办公室人员填写的Timesheet内容。

Read More

Share Comments

Implementing DDD Reading - Strategic Design

To truly object-oriented design

本文是实现领域驱动设计前三章关于战略设计的读后感。

image{:height=”300px” width=”400px”}

1. 概念篇

1.1 领域

广义上讲,领域即是一个组织所做的事情以及其中所包含的一切,也是组织的业务范围以及在其中所进行的活动。软件所讨论的领域即是这个组织的领域,应该是清晰明确的。不同的层面或粒度,领域一词承载的内容不同。

为了简化问题,避免大泥团这样的架构出现,我们认为领域拆分是必要的,可以帮我们简化问题域,是有好处的。

领域不是领域模型。

比如电子商务系统中电子商务是我们的领域。

Read More

Share Comments

升级.NET Framework不得不说的事 (二):Why 4.5.1

1.NET Framework‘s History

{:height=”300px” width=”400px”}

微软早在20世纪90年代末就开始开发.NET Framework,在2000年发布.NET Framework1.0 Beta版,开启了微软的下一代语言开发平台。在随后的十几年里,发布了3.0、3.5、4.0直至今天的4.5.1,涵盖了互联网应用开发和手机移动开发等多个领域,随之更新的还包括Visual Studio开发IDE(2013)。这些充分展示了微软.NET技术的发展,紧跟时代的潮流,然而也一如既往的让大家对它的复制和独创诟病已久。

2.Why 4.5+

2013年10月微软正式发布.net Framework4.5.1以及Visual Studio 2013,在多个方面进行了提升。

NET Framework 版本 CLR 版本 IDE 说明
4.5 4.0.0.0 Visual Studio 2012 包括 CLR 4 的更新版本,支持生成 Windows 应用商店应用,以及对 WPF、WCF、WF 和 ASP.NET (WEB API)的更新。
4.5.1 4.0.0.0 Visual Studio 2013 包括性能和调试改进、支持自动绑定重定向以及 Windows 应用商店应用的扩展支持。

4.5.1的发布已经有一段时间了,其中一些新的特性促使我们将升级提上了日程。是什么呢?开发效率和性能方面的提升以及对ASP.NET WEB API2的支持、WIF built in Framework让我对它都产生了很大的期待。

2.1 Async Programming Model

从Visual Studio 2012开始,增加了关键字async and await 使得异步编程更方便和提供更多的信息进行调试,具体请参考异步编程模型

Read More

Share Comments

升级.NET Framework不得不说的事 (一):What's it

In computer programming, a software framework is an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software.

1. The definition of Framework

作为一个框架,我认为首先它是能够作为Libarary提供一些公共开发库,供开发人员使用;第二,框架是为开发人员构建应用程序服务的。应用程序代码植入框架中,在运行时被框架代码所调用; 这是识别框架和类库的最大不同。

2. Why .NET Framework

在20世纪末期,微软开发平台下有C、C++等语言,然而它们的开发和运行部署各不一样。为了简化不同语言开发的复杂性、提高开发效率、统一运行部署的问题,并对当下流行的Network一词的响应,微软提出了基于.NET的下一代技术解决方案。NET这个词更多的来自于下一代网络服务(Next Generation Web Service)或者Network of all technologies,从这个词里我们可以看到当时微软对于.NET的雄心壮志。

“.NET is a brilliant strategy that enables Microsoft to define the next shift in the software business.”

“Gartner believes Microsoft is now providing more vision and influence regarding this shift than any other vendor.”
—Gartner Group

Read More

Share Comments

拆掉思维的墙,“拥抱客户” - 当开发人员站到客户面前

一个人思维的广度、宽度、深度、高度,决定了他/她对事物把握的合理程度。

这要说起我最近看的一些思维小书,<<拆掉思维里的墙>>、<<思考力>>,其中思维和思维体系的认知让我大受启发。也正赶上最近接二连三和客户谈了三个小项目,在搞定客户的同时也将自己逼上了“绝地”。

坦白说,我不是Geek,但我是技术Focus的,我以玩转技术为乐趣(尽管大多还只能想想 :-P),也以用技术解决问题,做出高质量的项目为追求,从兜里拿出锤子将钉子砸下去的感觉很爽。然而当我,一名技术Focus的开发人员站在客户面前Faciliate项目的时候,发现我的语言和客户的语言是打架的,我说的是前台后台页面调用,他说的登陆任务报表KPI。搞定客户,这么难?我的工具箱提示,换位思考,你应该带上客户的帽子,说客户的话。难道就是这么简单么?这是我真的问题么?

我回头反思了一个这个问题,如果客户是我朋友,如果客户是我们的HR,是否还有同样的痛?恩,似乎会容易点。那么当我们做事情的时候,如何能去掉迷茫,尽快融入到当下呢?

Read More

Share Comments

性格测试之MBTI

无论你处于什么样的生活状况,理解性格类型将使得你的感知更清晰,判断更明智,你的生活也更加接近内心的渴望。
–Isabel Briggs Myers

1.MBTI是什么

MBTI是一种性格类型测试工具,它包含一系列预先设计的问题,通过收集人们对这些指定问题的回答,来发现和识别他们在获取信息、做出决策、对待生活等方面的不同心理活动规律,从而推断他们的性格类型,帮助他们更好的的认识和了解自己,乃至他人。这个工具已经在世界上运用了将近30年的时间,主要应用于职业发展、职业咨询、团队建议、婚姻教育等方面,是目前国际上应用较广的人才甄别工具。

2. 我为什么要了解MBTI测试

目的其实很简单,就像第一段所说的,认识自己和他人。

很多时候,我常常会思考我是一个什么样的人,活着是为了什么;为什么和一些人一起工作会很舒服,和另外一些人就那么的纠结;人和人之间为什么有这么大的差异呢?当冲突来临的时候这些问题尤其明显,内心无比困惑。MBTI就像一面镜子,能够帮助我发现内心世界,了解到最真实的那个自己,从而可以对上述诸多问题答疑解惑,能够更好找到自己想要的,然后快乐的活着。

Read More

Share Comments

Parallels Desktop - Virtualization on Mac

Parallels Desktop支持在 Windows 与 Mac 应用程序之间拖放文件并直接从 Mac dock 启动 Windows 应用程序。

由于工作的原因, 我需要在Mac下安装Windows系统. 尽管这是一件比较二的事情但却不得不为之。

经过一番的调查研究,在Mac下安装双系统有两种方式: Boot Camp或者虚拟机。Apple提供的Boot Camp能够让用户在Mac上以原生的方式运行Windows操作系统,然而切换系统需要重启机器,这对于需要同时工作在双系统下的我来说很不方便,于是我选择了在Mac上安装虚拟机。

目前市场上比较好的虚拟机软件当属Vmware Fusion和Parallels Desktop了。在纵览了一堆评测文章后发现两者并没有什么区别,我试用了两者一段时间后最终选择了Parallels Desktop,主要看中了它支持Mac与Windows系统集成的强大功能,比如在Mac下可以使用Windows应用,共享目录等,另外Parallels Desktop的使用界面、配置安装等相对较为方便,适合我的品味。

Parallels Desktop For Mac

Parallels Desktop 虚拟机安装主要有三步:选定虚拟机镜像,进行配置、安装,很简单吧。我在安装过程中发现对于配置与Mac的集成方式这部分比较有用,所以就在本文分享一下。如果想了解具体的安装可以看一下官网的视频

Read More

Share Comments

2014我想做点什么

“忠实于自己,追随于自己,昼夜不舍。” 相信坚持的力量,活出自己,让生命拥有一切可能。

2014年

三个目标:健康美丽、知识女性、读书50本
三个习惯: 系统思考、晨间日记、早起

{:height=”300px” width=”400px”}

1. 个人

我个人探索的价值观包含:健康,尊重,平等,自由,真诚,勇敢,信任,骨气,责任,坚毅,创造力。
我的人生追求身体健康,家庭幸福,内心平静,工作有成就感,挣到很多钱(哈哈),获得别人尊重与信任。

Read More

Share Comments

2013Events

2013年6月我重新加入当前团队,承担了He_man的团队Lead,这是一次难忘的角色转换和人生经历。这一年里我85%的时间都放在了工作上,包括周末,这是一个沉甸甸的一年。各种角色、各种尝试、各种事情的发生推动着我不断向前,也让我对自己有更多认知,这种认知使我的行为发生了很大变化,我的生活,工作都从中受益良多。

2013里坚持写博客八个月,共发表19篇,完成每月2篇的目标;读书10本;个人分享、技术分享、组织/参与业务技术讨论n次(n>20);实践Grunt/Karma构建前端开发工作流;应用测试策略,优化沉重缓慢的回归测试,asp.net WEB API技术分享,angularjs技术分享,重构分享,快捷键,关注点分离,死锁等,在技术方面有很大的提升,尤其对于代码的品味、架构设计等方面有更多的思索与实践。

同时在办公室和中国区参与各种活动,公司内训,好声音,OO训练营,演讲俱乐部,北航的一级实践课程等更多的打开自己,向一名成熟的讲师迈进。

Read More

Share Comments

关注点分离的一次尝试

怎么做与做什么

软件架构是什么,用一句话说就是关注点分离。如果一定要对软件架构加个限定词的话,那就是面向业务的软件架构,否则都是扯淡。我们有很多技术是用来解决关注点分离的问题,比如依赖注入,比如AOP。如果关注点不分离,那么代码就可能不是内聚的,可能不是单一职责的,重复的坏味道可能已经悄悄的出现了,尤其在复杂系统中会更糟糕。同样如果代码不是面向业务的,而是面向实现的,就会很容易的发现这里是coffeeRepo.Find(); coffee.getPrice();那里也是,这个代码句句都懂,连起来为什么就是看不懂呢,我们的业务就这样迷失在了万千的无状态的面向实现的convertor,builder,generator,我们的domain在哪里? 这可能就是由当时一个简单的Copy Paste引来的血案。

话说重复是万恶之源。是的,重复是很强烈的业务概念缺失的坏味道,一旦发现重复代码是要警惕的。它常常需要我们重新审视代码,判断是否需要一个抽象或显示建模。

今天就拿一个销售咖啡系统的前端Javascript代码为例来尝试应用一下。

Read More

Share Comments