在三层控制台应用程序中使用常量或全局变量

2024-01-06

我有一个像这样的 3 层应用程序设置,带有控制台表示层。在我的业务逻辑中,我有一个类,我在其中声明了许多固定的不同变量,即值不会改变。这些变量的值取自应用程序设置。

现在我发现的问题是我的类调用不同的方法,其中这些变量通过方法签名传递。这是好的做法吗?如果不是,使用常量不是更好吗?如果是这样,常量应该放在哪里,以便我可以在需要的地方访问它们,而不是传递变量?

EDIT

为你们添加一些代码。所以它们是我在这里指的全局变量。

好的,在我的控制台应用程序(演示文稿)中,我目前有这样的内容:

public class Program
{
    public static void Main(string[] args)
    {
        MainClass myClass = new MainClass(appSetting1, appSetting2, appSetting3);
    }
}

然后在 MainClass 中我有:

public class MainClass
{
    private string _appSetting1 = string.Empty;
    private string _appSetting2 = string.Empty;
    private string _appSetting3 = string.Empty;

    public MainClass(string appSetting1, string appSetting2, string appSetting3)
    {
        _appSetting1 = appSetting1;
        _appSetting2 = appSetting2;
        _appSetting3 = appSetting3;
    }

    public void MyMethod()
    {
        Method2(_appSetting1, _appSetting2);
        Method3(_appSetting2, _appSetting3);
        Method4(_appSetting1, _appSetting3);
    }
}

我希望你能明白我的意思。我发现自己在多种方法中传递全局变量。我只是想有一种更简单的方法可以做到这一点吗?例如创建一个常量类或类似的东西?我不能 100% 确定最好的方法。

在我的 MainClass 中,我可以像这样声明我的全局变量:

    private string _appSetting1 = ConfigurationManager.AppSettings["appsetting1"];
    private string _appSetting2 = ConfigurationManager.AppSettings["appsetting2"];
    private string _appSetting3 = ConfigurationManager.AppSettings["appsetting3"];

但我真的想在我的业务逻辑中这样做吗?


另一种可能性是创建一个Settings加载它们并将它们公开为的类public readonly。这在过去对我来说效果很好:

public class Settings
{
    public static readonly string AppSetting1;
    public static readonly string AppSetting2;
    public static readonly string AppSetting3;

    static Settings()
    {
        AppSetting1 = ConfigurationManager.AppSettings["appsetting1"];
        AppSetting2 = ConfigurationManager.AppSettings["appsetting2"];
        AppSetting3 = ConfigurationManager.AppSettings["appsetting3"];
    }
}

静态构造函数会在第一次访问任何变量之前自动调用,因此您不必显式调用它。您的程序可以访问变量Settings.AppSetting1, etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在三层控制台应用程序中使用常量或全局变量 的相关文章

  • ASP Core HttpClientFactory 模式使用客户端证书

    任何人都知道在使用时如何使用客户端证书HttpClientFactory 在我发现的所有示例中 您需要提供HttpMessageHandler in the HttpClient构造函数 使用时不可用HttpClientFactory se
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • 动态选择和更新 LINQ 结果集中的列值

    我有一个场景 其中存在 LINQ 结果集 我使用了以下查询 var stockDetails from d in db BloodBanks where d bbUserName Session username ToString sele
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • 当 f & g 修改同一个全局变量时,表达式 f() > g() 的值是否未定义或未指定?

    UPDATE 由用户标记ecatmur 它是重复的在 C99 中 f g 是未定义还是只是未指定 https stackoverflow com questions 3951017 in c99 is fg undefined or mer
  • 比较 LINQ to SQL 中的两个日期

    我有一个数据库 其中有一个名为会议的表 会议日期使用以下格式存储在此表中 May 2nd 2011 例如 格式为5 2 2011 我的要求是获取两个日期 例如 2011 年 4 月 25 日和 2011 年 5 月 2 日 之间的会议 并编
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • std::tr1::function 和 std::tr1::bind

    我在使用时遇到问题veryC 类中的复杂 C 函数 重写 C 函数是not一个选项 C函数 typedef void integrand unsigned ndim const double x void fdata unsigned fd
  • 我的 WPF 应用程序未触发 MainWindow_Loaded

    我目前正在关注Pluralsight C Fundamentals Part 1并在Classes and Objects视频部分指导我在 Visual Studio 中创建一个新的 WPF 应用程序并填写代码 这导致以下结果 namesp
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • 试图使用加密来混淆我的项目打破了它

    我试图尝试不同的混淆选项 为了做到这一点 我首先尝试了加密货币 以下是我遵循的步骤 打开加密向导并选择一些选项 选择我的解决方案文件 完成向导后 我看到有些 Dll 被很好地混淆了 但我的项目现在无法构建 我注意到的两件事是 我的文件夹中有
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • ASP.NET中如何访问除wwwroot以外的位置

    我可以使用访问服务器的物理位置Server MapPath 这给了我内部的物理路径wwwroot文件夹 我想将一些数据保存到同一服务器的另一个驱动器中D 驾驶 我想我无法获取以下位置的物理位置D 驾驶使用Server MapPath因为它位
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • 执行存储过程时 ExecuteNonQuery() 返回 -1

    我正在尝试在 Visual Studio 中执行存储过程 下面给出 CREATE PROCEDURE dbo addStudent stuName varchar 50 address varchar 100 tel varchar 15
  • Gridview 错误:对 Bind 的调用格式不正确

    我有以下 gridview 代码
  • 返回 ICollection 而不是 List 的真正优势是什么? [复制]

    这个问题在这里已经有答案了 我读过几篇博客文章 提到对于公共 API 我们应该始终返回 ICollection 或 IEnumerable 而不是 List 返回 ICollection 而不是 List 的真正优势是什么 Thanks 复
  • C# 3.0 中自动属性和公共字段的区别

    我无法理解为什么 C 3 0 中存在自动实现的属性语言功能 当你说的时候有什么区别 public string FirstName than public string FirstName get set 因为它们在生成的 IL 代码 和机
  • “显式”关键字对返回值优化 (RVO) 有何影响?

    以下代码工作得很好 显示 RVO struct A A int cout lt lt A A n constructor A const A cout lt lt A A const A n copy constructor A foo r
  • DataGridView 捕获用户行选择

    我在处理选择时遇到问题DataGridView 我的网格视图包含一个金额列 表单上有一个文本框 应显示所选网格视图行的总数 因此 我需要在用户选择 取消选择 gridview 行时捕获事件并相应地计算 添加 减去 金额 我找到了两种方法 使

随机推荐

  • 在Python中模拟uint32_t?

    我试图将一个函数从 C 移植到 Python 并使其易于调试 我希望它执行相同的 CPU 字大小限制操作 以便我可以比较中间结果 换句话说 我想要这样的东西 a UnsignedBoundedInt 32 399999 b Unsigned
  • 如何使用 swift 在谷歌地图上显示自定义图像

    我怎样才能展示图片中的此类汽车图像 https i stack imgur com E3KJ5 png在谷歌地图上 根据纬度和经度 我尝试了以下代码 但我得到以下错误结果 https i stack imgur com 2FbZy jpg
  • FFMPEG:如何在不拉伸视频的情况下移动视频?

    请 我需要以下方面的帮助 我想移动视频 纵向类型 但不拉伸它 要使用 FFMPEG 创建 16 9 视频 我有以下示例 ffmpeg i video mpg filter v crop in w 100 in h 100 0 in h ou
  • 自定义数据可视化工具中的可视化表达

    当我选择内置可视化工具之一时 我可以看到原始表达式被可视化 如何从我自己的自定义可视化工具中获取此信息 我已经浏览过API参考 https learn microsoft com en us visualstudio debugger vi
  • Google Visualization Charts API 示例已损坏,如何修复?

    请参阅此页面 例如 https developers google com chart interactive docs quick start https developers google com chart interactive d
  • 将 Visual Studio 更新到 17.4.0 Preview 2.1 后出现工作负载错误

    今天我将 Visual Studio 更新到 17 4 0 Preview 2 1 Microsoft Visual Studio Community 2022 64 位 预览版 版本 17 4 0 预览版 2 1 之后 我无法部署 Bla
  • 如何对数据仓库中的流程和状态历史进行建模?

    假设我们有D PROCESS D WORKER and D STATUS作为尺寸和事实F EVENT将流程 内容 与工作人员 负责人 和 当前 状态联系起来 进程状态随时间而变化 我们应该存储在F EVENT每个进程 状态 工作人员一行 或
  • 通过 .net 中的 web.config 利用浏览器缓存?

    有些站点位于共享主机 Windows 2003 Server 上 因此我无法访问服务器配置 我到处都读到了有关利用浏览器缓存的内容 特别是静态文件 jpg css js 等 但是 在我的情况下如何做到这一点 主机已安装 NET web co
  • Accepts_nested_attributes_for 和nested_form 插件

    我在 form html haml 部分中有以下代码 它用于新建和编辑操作 仅供参考 我使用 Ryan Bates 的插件嵌套形式 http github com ryanb nested form fields f fields for
  • 为什么“join”不是“Monad”类的一部分[重复]

    这个问题在这里已经有答案了 众所周知的事实是 gt gt 可以使用来实现fmap and join while join可以使用来实现 gt gt 我们有什么理由不定义Monad与 一起上课join包含并使用以下默认定义 join x x
  • 图表js可以处理多少数据

    对于我的应用程序 我正在发出数千个数据点的获取请求 当我使用图表js显示数据时 渲染时间很长 而且我遇到了滞后 我还注意到每个数据点的 x 轴标签没有正确显示 因此必须省略它们 我喜欢图表的时尚设计和用户界面 但无法让它很好地适合我的用例
  • 关闭谷歌地图 API v3 中所有打开的信息窗口

    正如标题所述 在给定的事件中 对我来说 这恰好是在打开一个新的事件时 google maps InfoWindow我希望能够关闭任何其他当前打开的信息窗口 现在 我可以一次打开很多个 但我只想一次只打开一个 我正在动态创建信息窗口 即我不提
  • 返回 f 字符串的 For 循环函数

    我是 python 新手 尝试编写一个函数 该函数接受字典列表并返回一个新的字符串列表 其中每个字典中的名字和姓氏键连接在一起 names first John last Smith first Jessie last Snow def n
  • 无法在react.js中使用本地图像

    基本上我无法使用本地图像 我真的不确定为什么 我已经安装了 url loader 和 file loader 并尝试请求该文件 HeaderNavigation js 我尝试使用的图像位于同一目录中 并被引用为品牌图像 Created by
  • 通过 Visual Studio 代码 launch.json 运行 foreman start

    目前 我正在通过输入运行我的解决方案foreman start进入命令行 工作正常 我正在尝试使用 Visual Studio 代码调试我的代码 为此 我创建了一个 launch json 文件 version 0 2 0 configur
  • 在Python中以特定模式打印字母

    我有以下字符串并将其拆分 gt gt gt st 2g k 3p gt gt gt l filter None st split gt gt gt print l 2g k 3p 现在我想打印 g 字母两次 k 字母一次 p 字母三次 gg
  • 双面文件问题

    我正在程序中读取 system32 文件夹中的一些文件 其中一个文件 C Windows System32 gdi32 dll 表现出一种非常奇怪的行为 当我从程序中读取它时 它显示大小为 310 784 字节 当我从资源管理器查看它的大小
  • 如何从控制器调用 EditorFor

    我有地点列表 public class Location public string LocationName get set public string Address get set 我为此类创建了编辑器模板 div span Html
  • 从视频文件创建缩略图返回空位图

    我发送启动摄像机的意图 PackageManager pm getPackageManager if pm hasSystemFeature PackageManager FEATURE CAMERA Intent video new In
  • 在三层控制台应用程序中使用常量或全局变量

    我有一个像这样的 3 层应用程序设置 带有控制台表示层 在我的业务逻辑中 我有一个类 我在其中声明了许多固定的不同变量 即值不会改变 这些变量的值取自应用程序设置 现在我发现的问题是我的类调用不同的方法 其中这些变量通过方法签名传递 这是好