Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在构建N层应用程序时,我应该如何组织名称和空间?_C#_Asp.net_Architecture_Namespaces_N Tier Architecture - Fatal编程技术网

C# 在构建N层应用程序时,我应该如何组织名称和空间?

C# 在构建N层应用程序时,我应该如何组织名称和空间?,c#,asp.net,architecture,namespaces,n-tier-architecture,C#,Asp.net,Architecture,Namespaces,N Tier Architecture,因此,当我开始尝试在n层架构中构建我的网站时,我担心性能 一位回答这个问题的人告诉我,如果你应用了一个好的架构,你最终会有更好的性能。它与编译DLL之类的东西有关,但现在我不知道如何命名我的命名空间 就像我有我的数据访问层的主名称空间一样,假设我有这个名称空间作为我的数据层 但现在我在应用程序中有不止一个实体需要这个层提供服务,每个实体都有自己的较小实体 那么,我应该在一个名称空间(DAL)下包含所有数据代码,还是应该每个实体都有自己的名称空间(如DAL.E1和DAL.E2),或者每个主实体或子

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

一位回答这个问题的人告诉我,如果你应用了一个好的架构,你最终会有更好的性能。它与编译DLL之类的东西有关,但现在我不知道如何命名我的命名空间

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

但现在我在应用程序中有不止一个实体需要这个层提供服务,每个实体都有自己的较小实体


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

哼哼。。。这更像是一个组织问题

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

例如:

  • App.Domain//域实体
  • App.Domain.Authentication//与身份验证相关的域实体
  • App.Domain.Repository//存储库实现
  • App.Domain.Repository.Mapping//映射(例如,存储库的NHibernate HBM)
  • 应用服务//系统的公开功能
  • App.Controllers//视图的控制器
  • App.Controllers.Flex//专用于flex的控制器

性能始终是一个需要考虑的问题,但不是本质的问题,至少在非实时应用程序上是如此。维护性和可实现性是我认为最重要的问题。

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

  • 产品名称
  • ProductName.Activation
  • ProductName.Activation.Service
  • ProductName.Core
  • ProductName.Data
  • ProductName.Data.Customers
  • ProductName.Data.Engine
  • ProductName.Instrumentation
  • ProductName.Security
  • ProductName.ShellUI
  • ProductName.ShellUI.Windows
  • ProductName.Win32
一般来说,遵循类似于.NET Framework的模式是一个好方法,或者按功能划分是另一种方法。有些人可能会争辩说,您不想给程序集指定有意义的名称,因为这些名称可能会暴露应用程序的易受攻击部分或引起注意,但您永远无法阻止盗版者成为盗版者

其他人更喜欢给他们的程序集起一个很短的名字,这在今天仍然是由微软完成的。(例如mscorlib.dll)

我想这完全取决于项目和正在进行的工作。我并不总是遵循同样的经验法则,但99%的时间我都遵循一个共同的模式,我工作过的前一家公司也有他们设定的模式和实践

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

我的建议是按功能进行组织,因为这样可以简化项目的管理。您知道模块1处理系统的第1部分,模块2处理第2部分,依此类推。例如ProductName.Data.dll。在我的项目中,它处理所有数据绑定操作,如设置、首选项和数据库交互,而ProductName.data.Engine是一个允许ProductName.data轻松与数据层通信的框架。(在本例中,ProductName.Engine是实体框架,包含其他自定义类和必需的框架部件)

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


总而言之,祝你好运,因为随着项目规模的扩大,组织和结构会不断发生变化,但如果你能保持一切整洁、有序、发现和理解良好,那么你的项目将很容易管理。

因此,在域实体中,我应该有App.Domain.Enitiy1,App.Domain.Enitiy2还是应该在一个名称空间下列出所有域实体?请尝试根据实体的关系和功能对它们进行分组。由于它们之间的依赖性越来越强,所以可能会有一个很大的变化,即在一起或共享同一个基本名称空间。但您可以在域中拥有类似的内容:EntityBase。然后在身份验证:用户,继承自EntityBase的角色中,我理解这是主观的,取决于每个项目,但是如果初学者需要问一些主观的问题,那么他们可以有一些好的指导方针来帮助他们决定使用哪种设计模式。毕竟,谢谢=)我只是担心是否有好的/坏的实践会以+ve/-ve两种方式影响我的应用程序。但现在我想不会了,所以我将有一个基于这里答案的组织,并添加一点我对我的应用程序组织的感觉。这是非常古老的,但仍然是一个受欢迎的下载。它涵盖了我写的一些命名准则。它还包括命名约定和其他一般约定,目的是为编写高质量的