После проверки моего кода на CodeReview, я застрял в вопросе, как сделать мою часть кода более абстрактной.Как правильно связать существующий закрытый класс?
Как вы можете видеть в here, многие предлагают создать интерфейс ICommand
и IConnection
, чтобы упростить рефакторинг.
В моих примерах я буду использовать только IConnection
, но все также должно быть действительным для ICommand
.
Я решил, что мне нужно будет создать такой интерфейс;
public interface IConnection
{
//etc...
}
А затем, чтобы сделать MySqlConnection
иметь возможность наследовать от моего IConnection
, я бы создать свой собственный MySqlConnection
, который будет наследовать, как это;
public class MySqlConnection : MySql.Data.MySqlClient.MySqlConnection, IConnection
{
//etc...
}
Что будет означать новый MySqlConnection
бы до сих пор его методы и поля, и унаследует от IConnection
. Тогда я должен был бы написать класс Database
;
public abstract class Database
{
protected IConnection con;
}
И протяните его таким образом;
public class MySqlDatabase : Database
{
private override IConnection con = new MySqlConnection();
}
Теперь моя проблема, MySqlConnection
является sealed
; Я не могу расширять его, и поэтому я не знаю, какой вариант сделать этот класс базы данных абстрактным.
Вопрос в том, есть ли правильный способ реализовать абстракцию Database
, и если да, как бы я это сделал?
Обращаем внимание, что этот вопрос не имеет ничего общего с тем, что класс является одноэлементным (как показано в моем сообщении CodeReview). Эта проблема была выпущена и не имеет отношения к этому вопросу.
Я не думаю, что есть «правильный путь»; существует несколько способов. Мой первый вопрос будет тем, что будет целью IConnection. Что означает, что IDbConnection нет? –
Рекомендуемая точка вместо использования объекта concreate Connection, определенного для провайдера, с помощью интерфейса IConnection при создании соединения, так что завтра, если вы переходите на другого провайдера, вам не нужно делать какие-либо крупные изменения в вашем коде – Thangadurai
Is not что к чему IDBConnection (предоставляется каркасом) должен/должен быть? И, как я полагаю, MySqlConnection также реализует? –