2016-08-09 2 views
0

Я считаю, что класс, который будет связываться с базой данных, должен быть одноэлементным.Класс связи с базой данных как одноэлементный

Вместо того чтобы вводить контекст везде, где это необходимо, я создал один внутри класса базы данных, который является классом singleton.

Это хорошая практика?

Код:

class DatabaseService 
{ 
    public FreelanceOrganizerDataContext DatabaseContext { get; private set; } = new FreelanceOrganizerDataContext(); 
    static DatabaseService _singleton = new DatabaseService(); 
    private DatabaseService() { } 

    public static DatabaseService GetDatabaseService() 
    { 
     return _singleton; 
    } 

    //Save Section 
    public void AddProject() 
    { 

    } 

    public void AddCustomer() 
    { 

    } 

    //etc 

} 
+1

Одиночные игры - это, как правило, плохая идея. У Google есть инструмент, чтобы найти их и выкорчевать из своего кода. Это один из шаблонов GoF, который будет проголосован за остров сегодня, 21 год спустя. – duffymo

+0

Благодарим за отзыв. Не могли бы вы рассказать мне больше об ограничениях такого решения в этом случае? – SaszaKonopka

ответ

2

Я рекомендовал бы использовать IoC, такие как Unity или Autofac. Вы можете делать такие вещи, как Inject Dependecies, в своих классах, управлять жизненным циклом объектов (когда и как часто они создаются), и лучше настраивать себя на тесты единиц.

+0

Цельное приложение основано на шаблоне MVVM. Должен ли я создавать классы обслуживания (связь с базой данных) для каждого класса модели, который содержит ссылку на объект DbContext, вводимый контейнером IoC? – SaszaKonopka

Смежные вопросы