【问题标题】:When Building an N-Tier application, how should I organize my names spaces?在构建 N 层应用程序时,我应该如何组织我的命名空间?
【发布时间】:2011-11-19 04:15:46
【问题描述】:

所以当我开始尝试在 n 层架构中构建我的网站时,我担心性能。

其中一位回答问题的人告诉我,如果你应用了一个好的架构,你最终会获得更好的性能。它与编译 dll 和东西有关,但现在我不确定如何命名我的命名空间。

就像我的数据访问层有主命名空间一样,假设我有这个命名空间作为我的数据层..DAL

但现在我在应用程序中有多个实体需要由该层提供服务,并且每个实体都有自己的较小实体。

所以我应该将所有数据代码包含在一个命名空间 (DAL) 下,还是每个实体都有自己的命名空间,如 DAL.E1 和 DAL.E2,或者每个主实体或子实体都应该有自己的命名空间,如 DAL.E1。 c1, DAL.E2, DAL.E3.c1, DAL.E3.c2 .. 最后一个问题 DAL 本身是否应该包含任何类?

【问题讨论】:

    标签: c# asp.net architecture namespaces n-tier-architecture


    【解决方案1】:

    嗯……这更像是一个组织问题。

    我通常更喜欢通过系统上的功能来组织一个命名空间(类、结构等)中的项目,然后,如果需要,通过对对象类型进行分组。

    例如:

    • App.Domain; // 域实体
    • App.Domain.Authentication; //与认证相关的域实体
    • App.Domain.Repository; // 存储库实现
    • App.Domain.Repository.Mapping; // 映射(例如,存储库的 NHibernate HBM)
    • App.Services; // 暴露系统功能
    • App.Controllers; // 视图控制器
    • App.Controllers.Flex; // 专门用于 flex 的控制器

    性能始终是一个需要考虑的重点,但不是必不可少的,至少在非实时应用程序中是这样。维护性和可实现性是我认为最重要的。

    【讨论】:

    • 那么在域实体中我应该有 App.Domain.Enitiy1、App.Domain.Enitiy2 还是应该列出一个命名空间下的所有域实体?
    • 尝试按实体的关系和功能对实体进行分组。随着它们的依赖程度越来越高,可能会在一起或共享相同的基本命名空间有很大的变化。但是您可以在 Domain: EntityBase 中拥有类似的东西。然后在 Authentication: User, Role 继承自 EntityBase,
    【解决方案2】:

    这确实是一个主观问题,每个组织都会有完全不同或非常相似的模式。没有最佳答案,但有好的和坏的方法。行业中的一种常见模式是根据功能来命名您的库名称。例如,在我们的一款产品中,我们有:

    • 产品名称
    • ProductName.Activation
    • ProductName.Activation.Service
    • ProductName.Core
    • 产品名称.数据
    • ProductName.Data.Customers
    • ProductName.Data.Engine
    • ProductName.Instrumentation
    • ProductName.Security
    • ProductName.ShellUI
    • ProductName.ShellUI.Windows
    • ProductName.Win32

    通常遵循类似于 .NET Framework 的模式是一种好方法,或者按功能是另一种方法。有些人可能会争辩说,您不希望为您的程序集赋予可能会暴露应用程序的易受攻击部分或引起注意的有意义的名称,但您永远不会阻止盗版者成为盗版者。

    其他人更喜欢给他们的程序集起非常短的名称,即使在今天,微软仍在这样做。 (例如 mscorlib.dll)。

    我想这完全取决于项目和正在发生的事情。我并不总是遵循相同的经验法则,但 99% 的时间我都遵循一个共同的模式,而我工作的前公司也有他们的既定模式和做法。

    就项目内部的逻辑组织而言,祝你好运。与我交谈过的大多数其他开发人员都跟我说同样的话。 “我刚刚选择了一个结构/名称并使用它”。当然不是盲目的,而是经过深思熟虑,但很难有最好的方法,只有指导方针。

    我的建议是按功能组织它,因为它使项目管理变得容易。您知道 Module1 处理系统的 Part1,Module2 处理 Part2,依此类推。 ProductName.Data.dll 就是一个例子。在我的项目中,它处理所有数据绑定操作,例如设置、首选项和数据库交互,而 ProductName.Data.Engine 是允许 ProductName.Data 轻松与数据层通信的框架。 (在这种情况下,ProductName.Engine 是具有其他自定义类和所需框架部分的实体框架内容)。

    我想我遵循的另一条经验法则是,如果 Module1 有许多组成应用程序的 Part1 的部分,我会将它们全部保存在 Module1 中。除非在 ProductName.Data.Engine 中该功能如此庞大,否则它适合自己的库以便于管理。

    总而言之,祝你好运,因为随着项目变得越来越大,组织和结构一直在挣扎,但如果你保持一切都井井有条、井井有条,并且找到并易于理解,那么你的项目将很容易管理。

    【讨论】:

    • 我知道这是主观的,取决于每个项目,但是如果初学者需要问一些主观的问题,那么他们可以有一些好的指导方针来帮助他们决定使用哪种设计模式。毕竟谢谢你=)我只是担心是否有好的/坏的做法会以+ve/-ve的方式影响我的应用程序。但现在我认为它不会,所以我将建立一个基于此处答案的组织,并添加一些我认为我的应用程序有组织的组织。
    • 这已经很老了,但一直很受欢迎。 dcomproductions.com/Downloads/developerdocument.pdf。它涵盖了我简要地写过的一些命名准则。它还涵盖了命名约定和其他一般约定,目标是为编写高质量代码和结构良好的源代码提供指导
    • :D 好的 .. 我会读的,我需要这些旧东西,特别是如果它还在使用的话。因为你了解旧的东西,你会很容易抓住新的趋势
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多