业务逻辑层

2024-03-20

我正在使用 ASP.NET 和 Telerik 控件 (v2009 q2) 来编程数据驱动的应用程序。 我有一个名为 BLL 的类,它包含(几乎仅)静态类,这些类返回不同的对象,并以一些 id 作为参数。通常以列表形式返回对象组。

我的问题是,总是使用静态是否存在任何架构缺陷。我知道人们将业务层和数据访问层作为不同的项目。作为一个项目有什么好处?所以我可以添加更多功能或者这样更整洁。

提前致谢


使用静态方法作为入口方法并不是一个特别大的问题。这实际上取决于您是否有需要存储状态的工作领域,因为静态定义可能不允许您存储或分离状态信息。幸运的是,从使用静态声明退回到成员声明通常比相反的过程要轻松得多。如果从此类方法返回的项目单独负责状态,您甚至可能不会遇到此问题。

单独的库/项目对于划分工作单元很有用。正如 Dave Swersky 所提到的,尽管您可能会看到静态成员变量的怪癖,特别是在多线程应用程序中,但并没有严格要求所有内容都必须分离到不同的库中。

拥有单独的库还可以为您带来以下好处:

  1. 在开发过程中更好地分离变更,因为项目边界通常与源代码控制边界一致,从而允许更多的人在整个平台上同时工作。
  2. 如果布局和接口兼容,则可以在生产中独立更新单独的部件。
  3. 更好地组织每一层(无论是 BLL 还是 DAL)给定段的行为、功能和角色的交叉点。一些开发人员更喜欢根据允许用户对给定 BLL 中提供的项目进行操作的内容来严格隔离组件。

然而,一些团体发现大型整体库对他们来说效果更好。以下是在这种情况下很重要的一些好处。

  1. 对于旧组件和依赖项很少更改的项目,编译时间更快(对于 C/C++ 开发人员尤其重要!)。总体而言,不更改的源文件可以提示并允许编译器避免重新编译整个项目。
  2. 单个(或低计数)文件升级和管理,适用于必须最大限度地减少给定位置存在的对象数量的项目。对于提供库供其他方使用的人来说,这是非常理想的,因为人们不太容易受到个别项目无序发布或更新的影响。
  3. Visual Studio .NET 项目中的自动命名空间布局,其中使用子文件夹会自动暗示将为新代码添加提供的初始命名空间。这不是一个特别好的福利,但有些人发现这很有用。
  4. 通过数据库或服务器抽象来分离 BLL 和 DAL 组。这有点中间立场,但作为组织的一个级别,人们发现这个级别更适合长期发展。这使得人们可以通过存储或接收物品的位置来识别物品。但是,作为权衡,各个项目可能会更复杂——尽管可以通过#3 进行管理。

最后,我注意到的一件事是,听起来您已经实现了嵌套静态类。如果使用您的工作的其他人处于智能感知或其他环境快捷方式不可用的环境中,他们可能会发现此设置使用起来非常麻烦。您可能会考虑将某些级别的嵌套展开到单独的(或嵌套的)命名空间中。这也有利于减少声明感兴趣的项所需的输入量,因为命名空间声明只需要出现一次,而静态嵌套项每次都需要出现。您的同行会喜欢这个。

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

业务逻辑层 的相关文章

  • Web请求编码问题

    您好 我遇到以下代码的编码问题 有什么想法吗 string url http www google com ig api weather istanbul TR hl tr HttpWebRequest request WebRequest
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • OData 实体属性序列化名称与 C# 变量名称不同

    在使用 OData 的 ASP NET Web API 中 我有一个 C 对象 描述允许在 filter 中使用的字段 说我想限制 filter支持仅 filter deviceId gt someValue 随后http www ben
  • 使用 .net 3.5 和 C# 检测 Chrome

    好的 我正在使用此代码来检测浏览器 使用 chrome 时 它 给我浏览器 苹果MAC Safari 我需要它说 chrome Ater 环顾四周 我发现了这个 Google Chrome Safari 相同的浏览器名称和版本 https
  • 如何从网站的 .NET 安装程序中排除文件夹?

    我们的网站有一个安装程序 效果很好 我在创建安装程序时排除了 web config 和其他一些文件 但是我似乎无法排除文件夹 这可能吗 我已使用 NET 内置 Web 安装项目创建了安装程序 该项目可在新项目对话框中的 Visual Stu
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 为什么不是所有具有 Text 属性的 System.Web.UI.WebControl 类都实现 ITextControl?

    我很好奇为什么只有一些System Web UI WebControl当控件具有与接口相同的属性时 它们会实现某些接口 例如 有很多控件具有 Text 属性 但只有以下实现ITextControl Label Literal 数据绑定文字
  • ASP.NET AJAX 进度条:从代码隐藏更新?

    我在应用程序中具有 Excel 电子表格的导入功能 目前它使用 FileUpload 控件 我上传文件 然后对该文件运行操作 我想通知用户正在完成的操作以及完成的百分比 我认为我可以获取从 Excel 电子表格中提取的总行数 并在将每条记录
  • 共享 Owin Cookie 身份验证和基于旧版表单身份验证 cookie

    在我们公司 我们拥有大量使用 Asp net Web Forms 4 0 构建的应用程序 这些应用程序使用表单身份验证作为单点登录身份验证 配置如下
  • aspx页面中的if语句

    我想在我的网站上编写一个基本的 if 语句 以根据变量是否设置为 true 来显示项目 1 或项目 2 我对 NET 不太熟悉 需要一些关于如何让 if 语句在 aspx 页面上工作的基本结构的帮助 如果目的是显示或隐藏页面的一部分 那么您
  • 装配和产品版本不匹配

    我正在尝试在 asp net 网站中使用 Ajax 控件工具包 我从之前的一个示例项目中复制了 dll 它有以下详细信息 Assembly Version 3 5 40412 0 File Version 3 5 40412 2 Inter
  • ASP.net获取硬件信息

    如果我创建一个 ASP net 页面 我是否能够获取当前用户的 CPUID 和 BIOS 序列号 还是出于安全原因不允许这样做 我目前有一个获取这些值的 Visual Basic net 应用程序 我只是想知道是否可以在网页上执行相同的操作
  • 将标签文本设置为 gridview 的总行数

    我使用 sql 数据库中的存储过程作为 aspx 页面上 SqlDataSourceControl 的数据源 然后 我使用 SqlDataSourceControl 作为页面上 gridview 的数据源 gridview 上的分页设置为
  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • Web.config appSettings:复杂值

    Web config 的 appSettings 部分只能存储这样的简单字符串吗
  • DetailsView 事件“ItemUpdating”中的 OldValues 集合始终为空

    我正在使用DetailsView 但更新时 我无法获取OldValues 因为ItemUpdating 事件的DetailsViewUpdateEventArgs OldValues 始终为空 NewValues 的值正常 注意 我没有在应
  • Page.AsyncTimeout - 无休止的超时?

    I saw 一个例子 http www webreference com programming javascript rg30 index html of forever iframe实现 彗星模拟 所以我决定测试它 但添加了异步方法 这
  • 从异步方法同步调用 CPU 密集型方法的混乱

    我正在尝试 NET 4 5 的 async await 结构 我正在开发 RESTful Web API 解决方案 我试图弄清楚如何处理 CPU 绑定操作 1 从当前线程同步调用它 或 2 使用Task Run 让我们使用这个例子page

随机推荐

  • ClientCredentialType=Windows 和 =Ntlm 之间的区别

    任何人都可以清楚地解释使用之间的区别 clientCredentialType Windows and clientCredentialType Ntlm 托管 WCF 服务时在服务器端 Web config 中 我有一个 SOAP 1 1
  • Java Jackson嵌入对象反序列化

    我有回应 item field1 1 field2 1 我想将其反序列化为Privacy有 2 个字段的类field1 and field2 A已添加 objectMapper configure DeserializationConfig
  • “ReverseManyToOneDescriptor”对象没有属性“最新”

    我在尝试运行函数时收到此错误 这是我的第一个 django python 项目 所以我对此没有经验 我已经搜索过此错误 但没有找到类似的内容 def getpriority chunks p 0 for chunk in chunks a
  • 您可以使用重载的 bool() 来评估对 boolean 的构造函数调用吗?

    如果 bool 运算符重载 构造函数调用是否可以计算为布尔值 class A public A operator bool const return true main if A a A do stuff 上面的代码是否有效 或者我是否需要
  • 这个 Horizo​​ntalScrollView 布局或其 LinearLayout 父级是无用的

    我是 android 编程新手 我对水平滚动视图有问题 我遇到错误 此 Horizo ntalScrollView 布局或其 LinearLayout 父级无用
  • C# HttpClient 是否支持socks4/5 代理?

    我可以使用以下代码设置http代理 public class CustomFlurlHttpClient DefaultHttpClientFactory public override HttpClient CreateClient Ur
  • Python 相当于 R 的 cluster 包中的 daisy()

    我有一个数据集 其中包含分类 名义和序数 和数字属性 我想使用这些混合属性来计算我的观察结果的 不 相似度矩阵 使用daisy http stat ethz ch R manual R patched library cluster htm
  • 方法的通用接口重载?

    有没有一种好的 通用的方法来执行以下操作 而无需诉诸第二种方法或大量强制转换 我希望 API 尽可能轻量 并且在 OO 方面对我来说似乎没问题 class Foo public T Bar
  • 无法将(无类型字符串常量)转换为*字符串[重复]

    这个问题在这里已经有答案了 persistentvolumeclaim apiv1 PersistentVolumeClaim ObjectMeta metav1 ObjectMeta Name mysql pv claim Spec ap
  • 如何在 Django 中覆盖外部应用程序模板?

    我尝试覆盖django recaptcha模板没有任何运气 我究竟做错了什么 我知道在 Django 中覆盖外部应用程序的模板 https stackoverflow com questions 17918839 override temp
  • 如何解决平板电脑中的以下冲突?

    我为手机和平板电脑开发了一个 Android 应用程序 它已在两个模拟器中运行 当我在平板电脑模拟器中运行时 小部件的大小会填满屏幕 我应该怎么做才能解决这个冲突 您可以为手柄和平板电脑制作两种不同的布局res layout 用于手柄 和r
  • 从 CSV 文件读取的数据框中删除级别 - R

    我尝试加载棒球统计数据this http baseballguru com MLB2011 xls关联 当我使用从文件中读取它时 data lt read csv MLB2011 csv 它似乎将所有字段读取为因子值 我尝试通过执行以下操作
  • Str_Detect 使用跨列检测多列

    我想根据以下结果创建一个新专栏str detect跨多列使用across 例如 在下面的测试数据中 我想在以 job 开头的列中搜索 No job 如果在任何列中检测到该字符串 则返回 1 如果未检测到 则返回 0 test data lt
  • 使用 Keras 预测进行 Python 多处理

    Context Keras 模型 链接在这里 https drive google com file d 1f0WGCv11uObPziySE2wl6hXYKfyjqXBQ view usp sharing 为了 MWE 需要并行预测大量测
  • 像调用break一样短路Array.forEach

    1 2 3 forEach function el if el 1 break 我怎样才能使用新的来做到这一点forEachJavaScript 中的方法 我试过了return return false and break break崩溃和
  • 2020 年如何在 Windows 版 Git 中永久使用“LF”行结尾?

    我们的存储库使用LF 我的 Git for Windows 安装使用按原样签出 提交 Unix 风格的行结尾 但我在 IDE 中签出的每个文件中仍然出现错误 因为它仍然收到CRLF一直以来 即使它确实支持LF并配置为使用LF通过签到 edi
  • 使用 shell 脚本将人类可读的时间转换为 EPOCH

    我有一个人类可读的时间 08 18 2016 09 18 25 我希望使用 shell 脚本将其转换为纪元时间 我尝试过date s 但我收到错误 日期 无效日期 08 18 2016 09 32 42 将日期时间转换为纪元的规范方法是使用
  • Android Studio 2.3 更新后,Android 应用程序未在模拟器中加载

    我刚刚将 Android Studio 版本上传到 2 3 现在在模拟器中测试我的应用程序时遇到问题 它是一个 Nexus 5X 模拟器 上面加载了 Android 7 0 Nougat API 24 ABI armeabi v7a 我有一
  • Android 中的对象 XML 映射

    我正在开发一个基于客户端 服务器模型的应用程序 其中客户端在 Android 中 服务器在 PHP 中 我想将产品信息 例如名称 价格 说明 从客户端传输到服务器 我已读过编组 解组或序列化它可以实现 但所有教程和示例都是用 Java 编写
  • 业务逻辑层

    我正在使用 ASP NET 和 Telerik 控件 v2009 q2 来编程数据驱动的应用程序 我有一个名为 BLL 的类 它包含 几乎仅 静态类 这些类返回不同的对象 并以一些 id 作为参数 通常以列表形式返回对象组 我的问题是 总是