【问题标题】:An Architectural / Design Pattern Question一个架构/设计模式问题
【发布时间】:2011-07-04 20:54:48
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    您能做的最糟糕的事情之一就是过度设计,并在不需要时创建 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)

    【讨论】:

    • 感谢 Nix 的回复。您能否向我推荐一个很好的教程或网站,其中解释了 N 层架构以及 BLL 和 DAL 之类的东西?
    【解决方案2】:

    请确保我理解:将商品添加到购物车后,您会立即将它们持久化,而不是等到会话完成后再将它们作为单个工作单元进行。您不关心这里的交易,因此您必须拥有会话 ID 和某种标志来指示是否购买了商品。当客户表示他们想要购买时,您的程序会查询与该会话相关联的所有商品,并将他们购买的所有标志更新为一个工作单元。

    这是一个正确的总结吗?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-17
      • 2011-11-20
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2019-02-20
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多