Базовый класс с общими полями и функциями хорошего дизайна

У меня есть BaseDataClass с общими полями и функциями

    Protected Shared dbase as SqlDatabase
    Protected Shared dbCommand as DBCommand
    ...
    //also have a sync object used by the derived classes for Synclock'ing
    Protected Shared ReadOnly syncObj As Object = New Object()

    Protected Shared Sub Init() //initializes fields, sets connections 
    Protected Shared Sub CleanAll() //closes connections, disposes, etc.

У меня есть несколько классов, которые происходят от этого базового класса. Производные классы имеют все Shared функции, которые могут быть вызваны непосредственно из BLL без создания экземпляров.
Функции в этих производных классах вызывают базовый метод Init(), вызывают их конкретные сохраненные процедуры, вызывают базовый метод CleanAll() и затем возвращают результаты.

Так что, если у меня есть 5 производных классов с 10 функциями каждый, всего 50 возможных вызовов функций, так как все они Shared, CLR вызывает только по одному за раз, верно? Все звонки стоят в очереди, чтобы ждать, пока каждый Shared Функция завершается.

Есть ли лучший дизайн с наличием Shared функции в вашем DAL и все еще есть функции базового класса? Или, поскольку у меня есть базовый класс, лучше перейти к методам экземпляров в DAL?

1 ответ

В этом конкретном случае я бы сказал нет. Это не хороший дизайн. Чтобы даже заставить это работать правильно, каждый вызов метода в каждом классе должен сначала получить блокировку на syncObj чтобы не испортить состояние из-за нескольких потоков, конкурирующих за один и тот же ресурс. Игнорируя потенциальное влияние на производительность, которое может возникнуть из-за этого, вы не сможете заставить свои производные классы работать независимо, потому что все они используют один и тот же "материал".

Я определенно рекомендую в этом случае использовать методы экземпляра. Если вы все еще хотите, чтобы ваш индивидуальный класс использовал тот же SqlConnection или что-то еще затем передать его в класс с помощью внедрения зависимости.

Другие вопросы по тегам