Tôi đã đọc Tôi cần triển khai IDisposable
nếu lớp của tôi có biến thành viên tự IDisposable. Vâng, tôi đang thực hiện giao diện IDisposable
vì lớp học của tôi chứa một đối tượng cơ sở dữ liệu (db
lớp thành viên dưới đây) mà là IDisposable bản thân:Xử lý ngoại lệ trong hàm dựng khi triển khai IDisposable
public class CommissionModel : IDisposable
{
protected PetaPoco.Database db;
public CommissionModel()
{
string connectionString = "Server=localhost;...";
// The line below may throw an exception (!!!)
db = new PetaPoco.Database(connectionString, "mysql");
}
// Automatically close database connection
public void Dispose()
{
if (db != null)
db.Dispose();
db = null;
}
public void InsertRecord(Record somerecord)
{
// ...
db.Insert(somerecord);
}
Vấn đề là instantiation của db
thành viên có thể thất bại trong một số hoàn cảnh. Tôi nên làm gì khi ngoại lệ được ném vào hàm tạo và đối tượng cơ sở dữ liệu không được tạo? Tôi có nên rethrow ngoại lệ hoặc có thể kiểm tra nếu db != null
trong phương pháp InsertRecord?
IMO bạn nên tính lại ngoại lệ. Bạn có thể bọc exepction ban đầu vào một số cấp cao hơn, để có lớp cách ly tốt hơn. Tốt hơn là nên thông báo rằng có điều gì đó không ổn. – Krzysztof
Hãy xem [RẮN] (https://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29), cụ thể tại [SRP] (https://en.wikipedia.org/wiki/Single_responsibility_principle) và [DI] (https://en.wikipedia.org/wiki/Dependency_inversion_principle) – oleksii