gpt4 book ai didi

asp.net - 从 DAL 返回什么到 BLL

转载 作者:行者123 更新时间:2023-12-01 17:26:12 25 4
gpt4 key购买 nike

我目前有一个应用程序,其中包含:用户界面(网页)BLL(管理器和域对象)DAL(我的每个域对象的数据访问类)。

我在 UI 中使用以下内容来搜索域对象。

protect sub Button1_Click()
{
IBook book = BookManager.GetBook(txtID.Text);
}

这是我的 BLL

public class BookManager 
{
public static IBook GetBook(string bookId)
{
return BookDB.GetBook(bookId);
}
}

public class Book : IBook
{
private int? _id
private string _name;
private string _genre;

public string Name
{
get { return _name; }
private set
{
if (string.IsNullOrEmpty(value))
throw new Exception("Invalid Name");
_name = value;
}
}

public string Genre
{
get { return _serial; }
private set
{
if (string.IsNullOrEmpty(value))
throw new Exception("Invalid Genre");
_genre = value;
}
}

// Other IBook Implementations

}

最后这是我的 DAL

public class BookDB
{
public static IBook GetBook(int id)
{
// Get Book from database using sproc (not allowed to use any ORM)
// ?? Create IBook Item?
// return IBook
}

如何创建 IBook 对象并将其返回给管理器?我正在考虑将 DataTable 从 BookDB 返回到 BookManager 并让它创建 Book 对象并返回它,但这似乎不对。还有其他方法可以做到这一点吗?

编辑:我决定将每一层分成一个项目,并在尝试添加对 BLL 的引用时在 DAL 层中遇到了循环依赖问题。我无法从 DAL 访问 Book 类或接口(interface)或 BLL 中的任何内容。我应该在这里使用 ado.net 对象并让我的经理从 ado.net 对象创建实际对象吗?这是它的布局方式

BLL.Managers - BookManager
BLL.Interfaces IBook
BLL.Domain - Book
DAL - BookDB.

谢谢!

最佳答案

您可以创建仅包含数据的虚拟 Book 对象。获取、设置属性和成员值。本书中,数据库中的每个字段都有 1 个属性,但不验证任何内容。

您从数据库填充对象,然后将其发送到 BLL。

当您想要保存对象时,您还可以将其发送到 BLL。

如果有意义的话,BLL 中的类可以包裹这些对象。这样,就可以很容易地将其发送回 DAL。

虚拟书:

public class DummyBook:IBook 
{
private nullable<int> _id;
private string _name;
private string _genre;

public string Id
{
get {return _id;}
set {_id = value;}
}

public string Name
{
get {return _name;}
set {_name = value;}
}

public string Genre
{
get {return _genre;}
set {_genre= value;}
}

}

DAL 书:

public class DALBook 
{
public static IBook:GetBook(int id)
{
DataTable dt;
DummyBook db = new DummyBook();

// Code to get datatable from database
// ...
//

db.Id = (int)dt.Rows[0]["id"];
db.Name = (string)dt.Rows[0]["name"];
db.Genre = (string)dt.Rows[0]["genre"];

return db;
}

public static void SaveBook(IBook book)
{
// Code to save the book in the database
// you can use the properties from the dummy book
// to send parameters to your stored proc.
}
}

BLL 书籍:

public class Book : IBook
{
private DummyBook _book;

public Book(int id)
{
_book = DALBook.GetBook(id);
}

public string Name
{
get {return _book.Name;}
set
{
if (string.IsNullOrEmpty(value))
{
throw new Exception("Invalid Name");
}
_book.Name = value;
}
}

// Code for other Properties ...



public void Save()
{
// Add validation if required
DALBook.Save(_book);
}

}

编辑1:虚拟类应该放在自己的项目中(模型,正如评论中所述即可)。引用文献的工作方式如下:

DAL 引用了模型项目。
BLL 引用模型和 DAL。
UI 引用 BLL。

关于asp.net - 从 DAL 返回什么到 BLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com