- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建 3 层 winform 应用程序。由于这是我第一次尝试 3 层设计,所以我遇到了一些问题。
应用程序将支持附加多个 sqlite 数据库文件。
所以我创建了这样的类
public class Database
{
public string Name { get; set; }
public string FilePath { get; set; }
public bool isAttached { get; private set; }
}
现在我想收集这些对象。
我应该创建另一个类似下面的 DatabaseList 的类,还是只创建一个列表就足够了
public class DatabaseList : List<Database>
{
...
对比
List<Database> myDatabases;
Form1.cs 中应该创建什么?
例如,我假设上面的集合应该在 BusinessLayer 而不是 Form1.cs 中创建,并且只有 BusinessLayer 类是在 Form1.cs 中创建的。这是正确的吗?
Attach Method放在哪里?
方法是这样的:
public void AttachDB(Database db)
{
MySqliteHelper.Attach(db.Name, db.FilePath);
this.Add(db);
}
我是将方法放在 DatabaseList 类中(如果这是创建集合的方式)还是应该放在 BusinessLayer 中?
如何使 Attach 方法支持其他关系数据库,例如也驻留在单个文件中的 MS SQL Compact Edition
我正在考虑创建另一个具有与 MySqliteHelper 相同方法的通用数据库帮助程序类,而 AttachDB 方法将调用它。有点像
MyDBHelper.Attach(db.Name, db.FilePath);
或者这是像 Ninject
这样的 Dependency Injections
可以提供帮助的地方吗?我以前从未使用过它,我从 Ninject 记忆起的只是一个拥有不同武器的武士,所以在我看来这有点类似于我的具有不同特定数据库类的问题。
最佳答案
我将分几个部分来解决这个问题,因为它涵盖了很多方面。
3 层(或 n 层,分层)架构基本上是接口(interface)不直接与数据库通信的任何设计,无论多么薄实际层是。您可以创建一个具有获取和保存数据功能的类,它仍然符合 3 层架构的要求。话虽如此,我下面要解释的可能是最常见的 3 层架构实现。
要了解 3 层架构,首先要区分层和层。一个应用程序可以有很多物理层,但仍然只包含三个逻辑层。如果一张图片真的值一百万字,下图应该可以让您明白这一点。
在上图中,业务/中间层 由业务逻辑、业务对象和数据访问对象组成。该层的目的是为用户界面和数据库之间的中间人提供服务。
数据访问层由数据访问组件(见下文)和一个或多个数据访问对象组成。根据需要,数据访问对象通常设置为以下两种方式之一:
听起来您要处理多个数据库,因此使用一对一选项可能更有意义。通过这种方式,您可以灵活地指定哪个数据库/连接对应于哪个业务对象。
您的数据访问组件应该是一个非常通用的类,只包含连接数据库并与之交互所需的基本方法。在上图中,该组件由 dbConnection
类表示。
前端唯一处理的是业务对象和业务逻辑。有时它不是那么黑白分明,但这就是想法。
代替 Attach
方法,将连接字符串传递到您的数据访问组件。连接字符串可用于附加和/或连接到几乎任何数据库。
见上文。
老实说,这取决于您,并且不会影响 3 层架构的有效性。您知道您要满足的特定要求,所以如果有意义就去做。不过,请考虑您的数据访问对象将如何与此类交互,因为您需要公开用于对从列表中选择的任何数据库执行查询和非查询的方法。
关于c# - 关于我的第一个 3 层 Winform 应用程序中 BLL 和 DAL 的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382853/
请看下面的代码: Imports Microsoft.VisualBasic Public Class PersonBLL Private Name As String Private
我有一个分层解决方案如下: UI(用户界面) BLL(业务逻辑层) DAL(数据访问层) SharedEntities(仅包含实体 POCO 的 VS 项目) 我希望 BLL 有一个名为 GetPro
今天有人问我为什么在 asp.net 应用程序中为我的 bll 类使用这样的代码: public class StudentBll { public static DataTable GetS
在 BLL 中返回业务规则错误的最佳实践是什么?我是否应该只引发异常并在表示层捕获它们,我应该返回某种包含任何异常类型信息的对象吗? 最佳答案 “返回”这个词在这里很棘手。 多层设计的主要优点是正交性
我知道这是一个非常基本的问题。但我真的无法理解BLL应该包含的内容。 让我举个例子。 让我们考虑一个Login.aspx网页,该网页用于方便用户登录。 在这种情况下,Login.aspx将具有两个文本
我认为 BLL 是关于数据的。它不应包含名为 SendEmail 的方法。 BLL 是用于缓存数据、操作数据、进行与业务相关的计算的地方。发送电子邮件是一个业务流程,但实际发送电子邮件的代码应该在 B
我很困惑如何从业务层返回结果。有时如果消息没有通过标准,我需要返回消息。例如: public SalesDTO GetSalesByPrescriptionNo(string prescription
我的 UI 层中有一个设置文件,我需要在我的业务层中使用它的值。我的 UI 和业务层位于不同的程序集中。 我无法直接访问业务层中的设置值,因此我目前通过业务层构造函数传递它们。我正在考虑制作一个包含所
我们将在 .Net 中重建我们的网站之一。我读过很多文章,非常喜欢将我们的项目分成数据访问层 (DAL)、业务逻辑层 (BLL) 和表示层的想法(我们来自经典的 ASP,所以这对我们来说是一个巨大的进
我已经有了一个运行良好的分层数据访问设计。但我不知道这是否是最合适的实现。 我只是想知道 BLL 类或方法应该是静态的还是应该是只有一个实例的 concreate 类? 同时,我不需要序列化 BL
请耐心等待,我是 MVC 和 WCF 的新手。我已经有一组公开我的 BLL 的服务 (WCF),我正在尝试从我的 MVC.net Web 应用程序中使用这些服务,但我不确定如何在此处执行安全操作。 这
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭去年。 Improve th
确实是个愚蠢的问题,但只是想知道其他人对 DAL 和 BLL 的命名约定是否有比这些更好的名称。 最佳答案 我猜你指的是你正在创建的项目。 如果您关注“.NET Framework design gu
我需要你的建议。我正在尝试在 ASP.NET 中开发一个将 BBL、DAL、BOboj 分开的 3 层架构。 在 DAL 内部,我通过 _view 收集数据。我想知道,我应该为每个 View 编写另一
Web 应用程序 BLL 层中所有可能的缓存选项\级别是什么 (我知道我们只能在后面的 aspx 和 ascx 代码中使用 Session 字典,对吗?) 最佳答案 session 在 ASP.NET
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
只是一个简短的问题。在具有业务逻辑层 (BLL) 和数据访问层 (DAL) 的分层架构环境中,DAL 应将哪些类型传递给 BLL? 目前,我们的 DAL 类生成 DataTables 和 SQlDat
我习惯于手动创建 UI、BLL、DAL(有时我使用 LINQ-to-SQL 或 SubSonic 来创建 DAL)。自 MVC 发布以来,我已经使用 MVC 完成了几个小项目。 在这些项目中,我仍然继
您认为使用 F# 来实现业务逻辑层是个好主意吗?我将使用 Entity Framework 作为“数据映射器”并使用 C# 实现 UI 逻辑。 欢迎任何想法。我将不胜感激任何帮助! 谢谢。 附言这样做
Closed. This question is opinion-based。它当前不接受答案。 想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 2年前关闭。
我是一名优秀的程序员,十分优秀!