읽습니다. 내 클래스에 IDisposable 멤버 변수가있는 경우 IDisposable
을 구현해야합니다.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);
}
문제는 db
멤버의 인스턴스가 어떤 상황에서 실패 할 수 있습니다 : 내 클래스는 데이터베이스 개체 (아래 db
클래스 멤버)가 포함되어 있기 때문에 글쎄, 난으로 IDisposable 자체 인 IDisposable
인터페이스를 구현하고있다. 예외가 생성자에서 throw되고 데이터베이스 객체가 만들어지지 않을 때 어떻게해야합니까? 예외를 다시 던지거나 InsertRecord 메서드에 db != null
이 있는지 확인해야합니까?
IMO 예외를 제해야합니다. 더 나은 레이어 분리를 위해 원본 exepction을 더 높은 레벨 1로 래핑 할 수 있습니다. 무엇인가 잘못되었다는 것을 알리는 것이 낫습니다. – Krzysztof
[SOLID] (https://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29), 특히 [SRP] (https://en.wikipedia.org/wiki/Single_responsibility_principle)를 참조하십시오. and [DI] (https://en.wikipedia.org/wiki/Dependency_inversion_principle) – oleksii