2011-02-26 84 views
2

所以昨天我的伙伴和我自己对这个即将开发的电子购物网站的架构有所讨论。请注意,我为此与ASP.NET一起工作。他很惊讶地发现,我没有将Items添加到ArrayList或其他通用列表中,而是将它们直接插入到使用LINQ To Entities的数据库中。我是否只能通过这个网络应用程序,而不是使用n-tire,或者我应该按照我的朋友的建议那样做,是否有执行更新,删除等的方法。我非常感谢您的反馈,因为这对我来说是一个非常重要的难题。谢谢!建筑/设计模式问题

回答

4

我认为,这是值得考虑两件事情:

一个你能做的最糟糕的事情是在设计,创造了N层系统在不需要的时候。如果不需要有数据访问层,不要在其中放置一个数据访问层。

找出你系统的需求,如果你需要能够扩展,那么你将不得不设计你的系统在层,并使用更具扩展性的数据访问方法,以及服务获取/更新您的数据。

其次,您是否应该将这些东西扔到数据库中,因为用户将东西添加到购物车。我认为这不一定是一个n-teir问题。前往DB是昂贵的,尤其当你可以只存储它们的客户端/会话一边,直到..


有了这样说,我个人很喜欢用一个数据访问层,我发现它使代码更清洁,它使您可以标准化访问和更改数据的方式。而不是每个类/方法都能够改变数据adhoc,他们必须通过DAO层中一组明确定义的接口来完成,你可以控制,审计等。通过使用DAO层,它还可以帮助设施嘲笑,对于测试来说是无价的。

参考用于N TEIR发展:

  1. First just understand what you are trying to accomplish!
  2. What is N-Teir Architecture
  3. Asp.net Tutorial
  4. MSDN on Application Design (From N-Tier to .NET)
+0

感谢您的反应尼克斯。你能否引用我一个很好的教程或者一个网站,其中介绍了N层体系结构以及像BLL和DAL这样的东西? – Dragan 2011-02-26 13:38:22

+0

+1不要过度设计 – citronas 2011-02-26 13:52:47

2

让我确保我的理解:作为项目添加到购物车你pe立即将它们录制起来,而不是等到会议完成才能将它们作为一个单一的工作单元来完成。您不关心这里的交易,所以您必须拥有会话ID和某种标志来指示是否购买了某件商品。当客户表示他们想要购买时,您的程序将查询与该会话相关的所有项目,并将其所有购买的标志更新为单个工作单元。

这是一个正确的总结吗?

您已经选择了如何处理将购物车作为单个工作单元提交。我认为有不止一种方法可以做事,而你的方式是可以防御的。

但我不同意有关过度工程的评论。分层架构并不难构建。它将您的持久性逻辑集中在一个明确定义的包中,您可以单独测试并放在一边。

分层方法有很多优点。所有的开发都是通过将大问题分割成更小,更易管理的问题来管理复杂性的问题。我们使用对象和包来做到这一点。我认为随着系统的发展,这是一个更好的方法。这是为什么客户端/服务器没有像15-20年前那样广泛使用的原因之一。