代码之家  ›  专栏  ›  技术社区  ›  James

WebApplication体系结构-在表示层中保留HTTPContext的建议

  •  0
  • James  · 技术社区  · 15 年前

    大多数应用程序架构建议似乎强烈建议只有表示层才应该访问HTTPContext(以促进松耦合、减少依赖性、增加可测试性等)。

    一种选择是创建一个CacheFactory和一个SessionFactory,以及一个ICache和ISession接口,然后以某种方式使用DI原理将ISession和ICache传递给BLL中的每个方法,然后是需要它的DA层。

    这真的是开发人员最终要做的吗?还有其他更简单的方法来处理这个问题吗?

    谢谢你的建议。

    2 回复  |  直到 15 年前
        1
  •  1
  •   KP.    15 年前

    就我个人而言,如果我是为了ASP.NET(web)只有,我知道类库只针对web,我没有问题引用系统.Web或其他需要的集会。有时候实用性应该放在第一位。

    另一方面,如果您知道或不确定BLL、DAL或其他层是否可以在客户机服务器或其他环境中重用,则可能需要考虑使用更灵活的方法,例如会话处理程序接口等。

        2
  •  0
  •   Adrian K    15 年前

    根据我的经验,缓存是在某一层上完成的—而且缓存的内容适用于该层的范围,因此:

    • BL可能会缓存类似的数据(比如POCO的数据)——换句话说,是“逻辑”数据,BL已经应用到了它;所以我们在BL级别缓存BL数据。

    当您考虑缓存时,作为系统的架构师/设计师,您将决定哪些东西值得缓存,通常这是由平衡的需要驱动的:

    • 性能需要达到特定的目标。

    假设我们缓存是为了提高性能,那么您需要分析您的系统,并确定需要消除或避免的瓶颈—此分析的第一步至少应该确定首先要关注哪个层。

    虽然我所说的一切都是真的(据我所知),但这一切都是基于这样一个假设:我们提供的是系统功能的“垂直”部分(如“创建发票”、“添加产品”等);您可以应用另一个模型——横切关注点模型。

    MSEntLibs可以登录到数据库,但是如果我直接从我的UI调用MSEntLibs日志记录方法(登录到DB)(跳过BL),我就不在乎了。

    所以取决于你想做什么,答案要么是:

    • 简单地确定什么需要缓存,让适当的层来处理它。
    • 你根本不需要尝试使用DI把东西传给BL——一个横切的黑盒组件可能是合适的?
    推荐文章