He leído Necesito implementar IDisposable
si mi clase tiene una variable miembro que a su vez es IDisposable. Bueno, yo estoy poniendo en práctica IDisposable
interfaz porque mi clase contiene un objeto de base de datos (db
miembro de la clase más adelante), que es en sí IDisposable:Tratando con excepciones en el constructor al implementar 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);
}
El problema es creación de instancias de db
miembro puede fallar en algunas circunstancias. ¿Qué debo hacer cuando se lanza la excepción en el constructor y no se crea el objeto de la base de datos? ¿Debo volver a lanzar la excepción o tal vez verificar si db != null
en el método InsertRecord?
IMO debe volver a lanzar la excepción. Puede envolver la excepción original en un nivel superior uno para tener un mejor aislamiento de capa. Es mejor informar que algo va mal. – Krzysztof
Eche un vistazo a [SOLID] (https://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29), específicamente en [SRP] (https://en.wikipedia.org/wiki/Single_responsibility_principle) y [DI] (https://en.wikipedia.org/wiki/Dependency_inversion_principle) – oleksii