- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在组织一个解决方案,我需要一些关于如何正确安排项目组件的提示。
现在我已经在一个项目中实现了所有内容,但我觉得将一些组件隔离在他们自己的项目中是有意义的。我拥有的主要模块按项目文件夹分类,分别是逻辑模块、数据库访问模块和模型模块。对我来说,这些模块应该在它们自己的项目中定义(可能作为 DLL)是有意义的。
现在,我的问题来自于这样一个事实,即在应用程序启动期间,逻辑实例化了一个配置类,该配置类从 app.config 文件中读取配置,并为这些模块所知。将配置隔离到它自己的项目中是否有意义,以防止其他模块依赖于逻辑模块?如果是这样,配置类是否应该从接口(interface)实现,以便每个模块只能访问它的相关配置?
最佳答案
"The main modules I have are categorzed by folders on the project, and are the Logic module, Database Access module and the Model module... the logic instantiates a configuration class which reads configurations from the app.config file and is known by these modules."
这给我的印象是你有一个或多个类将配置类作为构造函数参数,或者有一个配置类的全局/单例实例供其他类使用。
但是配置类可以读取配置等。推测其他类不需要可以读取配置的东西。他们只需要一些值*(现在可以从配置中读取)。那些其他类不需要出去向任何人询问这些值**;他们应该只需要这些值作为构造函数中的参数。
这样,其他类就不需要了解配置类了。有人只是将他们需要的数据交给他们。但是谁呢?
答案是入口点***。解决方案中包含入口点的每个项目(控制台应用程序、Web 应用程序和测试项目)都有责任与环境进行交互;它知道它希望其余代码在其中运行的上下文。因此入口点需要通过任何必要的方式(例如您的配置类或自动生成的 MyEntryPoint.Properties.Settings)获取配置信息,然后将其提供给构造函数他们需要的其他类(class)。
*如果每个类都需要大量的配置信息(正如您在下面的评论所暗示的那样),请考虑将这些类分解为更简单的类(因为需要大量配置可能会导致职责不明确)或将必要的信息到代表连贯概念的 DTO。然后可以将这些 DTO 放在它们自己的项目中,供配置信息的消费者和生产者引用。
**这假定从配置类获得的值在将使用它们构造的对象的生命周期内是恒定的。如果不是,则不应将这些值作为构造函数参数,而应采用一个接口(interface)(或 Func),您可以在需要时调用该接口(interface)以获取所需信息。这些接口(interface)可以在任何人都可以引用的其他空项目中定义。这听起来像你想要的
"should the configuration class implement from interfaces so that each module only has access to it's relevant configurations?"
当你说
"Does it make sense to isolate the configuration into it's own project, to prevent the other modules from depending on the logic module?"
答案是肯定的,也不是。 Logic 模块做一些事情;做事意味着需要测试;测试希望以适合测试的任何方式配置他们正在测试的任何内容。所以 Logic 不应该负责配置;它本身应该从进行配置的人那里获取信息。相反,配置是入口点的工作。
***我在这里使用的“入口点”有点松散。我不是在专门讨论 .entrypoint
IL 指令,而只是在您的代码中可以由您无法控制的东西控制的第一个地方。这包括 C# 控制台应用程序中的 Main、Web 应用程序中的 HttpApplication.Application_Start、被您选择的测试运行器识别为测试的方法等。
关于c# - 组织解决方案,需要技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991665/
我只是想知道要安装哪个版本的 Visual Studio 2010(专业版或高级版)提示升级项目.. 项目包括:asp.net mvc、数据库和silverlight。 最佳答案 通常,由不同版本的相
目录 前言 1、常见 key-value 2、时效性强 3、计数器相关 4、高实时性 5、排行榜系列 6、文章小结 前言 在笔者 3 年的
目录 前言 四、技术选型 五、后端接口设计 5.1业务系统接口 5.2App 端接口 六、关键逻辑实现 6.1Red
目录 前言 一、需求分析 1.1发送通知 1.2撤回通知 1.3通知消息数 1.4通知消息列表 二、数据模型设计
目录 前言 一、多租户的概念 二、隔离模式 2.1独立数据库模式 2.2共享数据库独立数据架构 2.3共享数据库共享数据架构
导读: 虽然锁在一定程度上能够解决并发问题,但稍有不慎,就可能造成死锁。本文介绍死锁的产生及处理。 死锁的产生和预防 发生死锁的必要条件有4个,分别为互斥条件、不可剥夺条件、请求与保持条件和循环等待条
在浏览网页后,我找不到任何功能来执行此操作,我有可行的个人解决方案。也许它对某人有用。 **使用 Moment 插件转换日期。***moment(currentPersianDate).clone()
是否有一种解决方案可以很好地处理数字(1-10)手写?我试过tesseract,但我得到的只是垃圾。 理想情况下是 OSS,但商业也可以。 最佳答案 OpenCV 现在带有手写数字识别 OCR 示例。
在服务器应用程序上,我们有以下内容:一个称为 JobManager 的单例类。另一个类,Scheduler,不断检查是否需要向 JobManager 添加任何类型的作业。 当需要这样做时,调度程序会执
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
当您尝试从 GitHub 存储库安装某些 R 包时 install_github('rWBclimate', 'ropensci') 如果您遇到以下错误: Installing github repo
问题在以下链接中进行了描述和演示: Paul Stovell WPF: Blurry Text Rendering www.gamedev.net forum Microsoft Connect: W
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
已编辑解决方案(如下...) 我有一个启动画面,它被打包到它自己的 jar 中。它有效。 我可以通过以下方式从另一个 java 应用程序内部调用 Splash.jar: Desktop.getDesk
什么是创建像 PageFlakes 或 iGoogle 这样的门户网站的好框架/包? ?我们希望创建一个为员工提供 HR 服务的员工/HR 门户,但我们也需要一种足够灵活的产品,以便我们可以使用它来为
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
如何将 solr 与 heritrix 集成? 我想使用 heritrix 归档一个站点,然后使用 solr 在本地索引和搜索该文件。 谢谢 最佳答案 使用 Solr 进行索引的问题在于它是一个纯文本
完整日历不包含工作时间功能选项(在任何一天的议程 View 中选择第一行和最后一行 - 例如公司不工作)。我做到了类似的事情: viewDisplay: function(view){
我正在使用 bootstrap 作为我的下拉菜单。但有一个问题, 如果我的下拉菜单有多级子菜单,那么它会显示在屏幕上,并出现底部滚动条。 如何将子菜单保留在屏幕内,我需要一个 jQuery 解决方案。
我有一个要转换为 C# 的 Excel 宏。目前我手动转到一个已经打开的 IE 窗口,从中复制所有内容(html 表)并粘贴到 excel 工作表中。然后我正在处理数据。这非常有效,因为将 html
我是一名优秀的程序员,十分优秀!