建筑/设计模式问题

时间:2011-02-26 13:24:49

标签: c# asp.net architecture linq-to-entities

所以,昨天我的伙伴和我对这个正在开发的电子购物网站的架构有了这种讨论。请注意,我为此使用ASP.NET。他很惊讶地发现我没有将Items添加到购物车中的ArrayList或其他Generic列表中,而是使用LINQ To Entities将它们直接插入到数据库中。我可以只通过这个网络应用程序,而不是使用n轮胎,或者我应该如我朋友建议的那样,有方法执行更新,删除等。我非常感谢您的反馈,因为这对我来说是一个非常重要的困境。谢谢!

2 个答案:

答案 0 :(得分:4)

我认为这里有两件事要考虑:

您可以做的最糟糕的事情之一是过度设计,并在不需要时创建N层系统。如果不需要数据访问层,请不要在那里扔一个。

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

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


话虽如此,我个人喜欢使用数据访问层,我发现它使代码更清晰,并且它使您标准化访问和更改数据的方式。而不是每个类/方法能够更改数据,他们必须通过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)

答案 1 :(得分:2)

让我确保理解:随着商品被添加到购物车中,您就会立即保留它们,而不是等到会话完成后才将它们作为单个工作单元来完成。您不关心此处的交易,因此您必须拥有会话ID和某种标志来指示是否购买了商品。当客户表明他们想要购买时,您的程序会查询与该会话相关的所有项目,并将所有购买的标志更新为单个工作单元。

这是正确的摘要吗?

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

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

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