2011-09-25 62 views
6

好的,这已经在我脑海中一段时间​​了。我正在为所有常见的中间层对象创建可重用的公司命名空间(类库)。这个程序集可以在开发阶段被我们的开发人员引用。这是我的问题。创建一个由所有中间层逻辑组成的单个组件还是将此功能分解为更小的组件更为可接受?创建可重复使用的公司命名空间的最佳实践

示例:单个组件中(命名空间的例子)

系统

System.IO

System.IO.RegEx

System.Net

System.Net。 Mail

System.Security

的System.Web - AssemblyFull.dll

实施例:多个组件

System.IO

System.IO.Reg - 编译为AssemblyIO.dll

System.Net

System.Net - 编译成AssemblyNet.dll

在过去,我已经这样做了使用这两种方法,但我不知道其他人一样,为什么?我不在寻找任何代码示例,我只想知道其他开发人员在做什么?

在此先感谢。

+0

如果它只包含所有内容,程序集将有多大?您是否期望贵公司的项目能够使用所有常用功能?如果不是的话,你是否可以在逻辑上将它分解成相关的子单元(这可能是放入不同程序集的好候选)? –

+0

Google for reuse/release equivalence principle – driushkin

+0

Richard - [full]程序集将由100个对象组成。大多数项目总是会使用75%-85%的功能,但仍然可以使用其他部分。我最初的想法就是像你所说的那样处理这个问题。拿最广泛使用的物体,并建立一个共同的议会,然后采取其他对象,并将其分成单独的单位。但另一方面,我可以看到单个程序集如何让其他开发人员的生活更轻松。你只需要引用中间层程序集并完成它。我有一种感觉,这是6到1半到另一个 –

回答

4

作为一般规则,我用它来分开程序集,如果它们没有显式耦合。例如,如果您有一个低级别的网络API,以及其他用于FTP相关操作的API,则后者可能取决于前者;但对于API用户,您的开发人员;没有必要在一个单一的组件中都有;也许一个项目不需要FTP API,因此他们只需要包含核心“Net”程序集。您可以分离API,以便尽可能更原子化,并避免开发人员在仅使用其中很小一部分时包含大集合。

这种方法的缺点是,如果开发人员需要FTP组件,他们也需要包含网络;所以你必须找到一种方法来管理那些降低开发人员复杂性的依赖关系。我在使用Java应用程序时使用Maven (from Apache),但到此日期我不知道maven-like alternative for .NET

但是,如果您正在为您的公司构建一些API,请使用Wiki站点或其他轻量级文档工具来解决此问题。

+0

洛伦佐 - 感谢您的快速反应。这是我第一次听说Maven,听起来很酷。我越想打破我的对象就越有意义。尽可能将它们分开。如果其中一位开发人员需要访问电子邮件功能,那么确实没有理由让密码对象可见/可访问。感谢所有快速反应的人,我非常感谢他人的意见。另外我知道我不是星期天唯一工作的人。 –

+0

@lorenzo NuGet(www.nuget.org)与.NET上的Maven近距离接触 – x0n

+0

@xOn Tks,我将评估Nuget ... –

1

我不认为他们是一个正确的答案,但我倾向于为我们所有的图书馆使用通用的命名方法。

我有一个库处理大量的中间层功能,有点像大多数应用程序使用的常见任务。

Web.CreditCard
Web.CreditCard.Authorization
Web.CreditCard.Charge
Web.CreditCard.Batch

Web.Store.Order
Web.Store.Entities
Web.Store。车
Web.Store.Auth

Web.User.Auth.OpenID
Web.User.Auth.OAuth
个 Web.User.Account
Web.User.Preferences

所以这并不重要项目的类型你的建筑,你可以重新使用它们,并确定他们的真快。其中一些具有自己的接口,可以继承和重载,以根据项目需求添加更多功能。

+0

这几乎就是我所看到的在我们的仓库中。我只是想让其他开发者尽可能简单。我将继续推进一个常用程序集,该程序集将用于所有项目,然后为不常用的功能分离程序集。感谢所有那些很快回到我身边的人,我真的很感激。 –

0

感谢大家回答了这个问题。由于每个项目都不同,几乎不可能提出正确的答案,所以我会描述我将如何处理这个问题。

第一:

我需要确定哪些业务/中间层对象会在前进的所有项目中使用。一旦这些已经确定,我会。常见或[公司]创建装配[公司] .common.util。这些将被用于我们目前和即将开展的项目。

二:

找出特定项目多的对象。这些组件可能会或可能不会被引用。一个例子是[company] .security.cryptography

三:

确保每个对象是有据可查的,这样以后的开发人员必须正确维护所需的知识和引用正确的组件。

我想感谢大家很快回到我身边。这是我的第一篇文章,但我可以向你保证,你很快就会再次见到我。再次感谢。

+1

我不喜欢在名称空间内使用公司名称,我曾与Verizon以及Verizon的许多名称空间一起工作。[名称]现在该公司的大块不再被命名为Verizon,但它仍然有那个名字空间在那里。 –

+0

有效的点。我通常会使用公司名称,因为我们通常会执行某种形式的集成,以便更容易地识别程序集的来源。如果你正在创建一个通用命名空间,你会用什么作为你的顶级? –

0

我对可复用文件使用了不同的方法。

我创建一个单独的解决方案,包括可重复使用的所有组件,测试等

每个可重复使用的“事物”(类,函数,用户控件,图标等)是在一个单独的文件中。

需要来自可复用部分的一些功能的项目直接链接到源文件。 (“添加现有项目”,“添加为链接”)。为了方便起见,我把所有的再使用零部件在VS一个“工具”文件夹(真正的实用工具文件夹为空,因为文件链接)

此设置允许我:

  • 只需添加常用功能我需要
  • 没有额外的依赖公用事业
  • Bug修复被自动列入未来建设

唯一的缺点是,如果你需要手动添加任何DEPE附加功能获得的属性(例如另一个可重复使用的部件或组件)

由于我不使用不同的组件中,命名空间只是如下功能:

  • Company.Utilites
  • Company.Utilites.WPF
  • Company.Utilites .IO