PetShop.NET

有位网友把微软的PetShop 3.* 用开源技术重写了,要我提提意见。

首先,我要对这位网友表示感谢,支持和鼓励,让我们见识到了Java世界里时兴的技术/模式在.NET开发中的具体应用。随着这些时兴技术不断地移植到.NET中,我们开发人员会有越来越多的选择。你不需要等ObjectSpaces,类似技术已经在这里

我的看法是,微软的PetShop 3.*,除了跟Sun的J2EE版本做比较外,主要是提供了一个可做参考的样品,在当前.NET的框架,类库下,怎么手工实现分层应用。这里面涉及很多细节,怎么设计业务层/持久层,怎么做事务,业务层与持久层怎么交互,表现层怎么跟应用层交互,等等,这对初学者来说,是个很好的指导,让人了解在多层应用中,具体都需要做什么。由于O/R的差别,在大型项目中,很多时候大概会用专门的O/R Mapper或持久框架。象NHibernate这样transparent,non-intrusive的技术,指明了很好的方向。但不管用什么,多层应用里所涉及的细节都是需要了解的。在这一点上,对一个.NET开发人员而言,我想,微软的PetShop serves its purpose。

我同意,微软的PetShop要真正成为Best Practice的样板,有不少需要提高,完善的地方。譬如他们的Domain Model,用Martin Fowler的说法是有点贫血(Anemic),但这也许是因为这应用本身没有多少业务逻辑,有人指出过里面不少的缺点,也有人指出过SQL Server / Oracle的实现是否用Bridge模式来实现更恰当些。

但我觉得,这位网友把几个层都做了大改动,基本上就是重写了,不再是“重构”了。而且我觉得这位网友没必要局限于微软的PetShop implementation,而应该从原来的J2EE的blueprint出发,用那些开源技术完全重新实现PetShop,也许更可体现这些技术的好处。同时希望这位网友能把其中的要点写成文章发表。

需要指出的是,象NHibernate/Spring.Net等技术还是在Beta甚至Alpha阶段,在正式的production项目中,要慎用