尽管我完全同意 Peter 和 Modika,但我想补充几点。
在设计您的应用程序时,您需要了解将这些内容放在单独项目中的原因,并对关注点分离有透彻的了解。意思是,你需要知道你在分离什么,为什么你会担心它。
我没有读过那本书,所以我对作者的方法没有评论。无论如何,在相信作者如何命名事物是“专业”的做法之前,停下来不仅要考虑您的应用程序,还要考虑诸如 .net 框架本身之类的事物的结构。
在任何给定的项目中,您可能必须生成几种类型的工件,包括:数据访问代码、对象模型、UI、业务逻辑等。
有几个自然边界区域。例如,您可能希望将数据访问代码分离出来,以防您需要换出永久存储选项,甚至只是换出使用 LINQ、NHibernate 或您拥有的访问方法等访问方法。
您可能希望在其他解决方案中重用对象模型的可能性;或者您甚至可能想要支持交换 UI 部分,例如从 WebForms 移动到 MVC 到任何东西。您甚至可能需要根据对象模型的使用方式或使用对象来将不同的业务逻辑应用于对象模型。
也就是说,并非每个应用程序都有相同的结构需求。例如,如果没有业务逻辑,对象模型可能完全没有意义;或者,更有可能的是,某些逻辑绝对必须与类定义合并,而其他逻辑则特定于库的使用方式。如果是前者,那么您有充分的理由将业务逻辑与类定义放在完全相同的项目/程序集中。如果是后者,那么您可能希望将其分离到其他程序集中并为对象实现接口定义。
根据我的经验,如果您不知道,请将其放在一起,因为这是最简单的选择,如果情况需要,可以在以后重构您想要的内容。
如果您在早期进行过度设计,那么您会增加项目时间/成本,从而获得可能永远无法实现的潜在收益;这很少是一个好的决定。还有一个问题是,你不知道以后可能需要什么,现在分离可能意味着你今天增加了项目时间,但以后仍然需要重构,这是双重打击。真正专业的开发人员恕我直言,在评估潜在解决方案时会考虑成本/开发时间。
现在,了解关于很有可能在其他项目中重用的定制会员提供程序的特定要求。自定义提供者应该在它自己的项目和命名空间中。我可能会使用像Company.Security
. 这将提供最佳的可移植性方法,允许您仅重用相关代码,而无需拖累这个项目特有的各种其他东西。
因为它使用提供者模型,所以您的其他项目中不应该有需要直接引用这个的代码。只需使用已经存在的接口即可。