Трябва да зададете няколко въпроса.
Искате ли някаква или никаква от вашата бизнес логика на ниво db? Очевидно db тригер може да направи това (извършване на някакво действие, когато стойност се промени, дори ако е само много специфична стойност).
Виждал съм някои системи, които са db задействали тежко. Тяхната „логика“ е дълбоко и силно свързана с db платформата. Има някои предимства в това, но повечето хора вероятно биха казали, че недостатъците са твърде големи (свързване, липса на капсулиране/повторна употреба).
В зависимост от това какво правите и вашите наклонности бихте могли:
-
Уверете се, че всички DAO/BusinessFunctoin обекти извикват вашето „събитие“
object.function
да правите това, което искате, когато настъпи определена промяна на стойността. -
Използвайте тригер, за да извикате вашето „събитие“
object.function
когато настъпи промяна на определена стойност. -
Вашият тригер прави всичко.
Аз лично бих склонил към Вариант 2, където имате минимален тригер (който просто задейства извикването на събитие към вашата object.function
), така че да не свързвате дълбоко своя db с вашата бизнес логика.
Вариант 1 е добре, но може да бъде малко неприятно, освен ако нямате много тесен набор от BF/DAO, които говорят с това db table.field, което искате да наблюдавате.
Вариант 3 е имхо най-лошият избор, тъй като свързвате логиката към вашата база данни и намалявате нейната достъпност до вашия бизнес логически слой.
Като се има предвид това, ето малко информация за постигане на това чрез Опции 2:
Използвайки този пример от MSDN:http://msdn.microsoft.com/en -us/library/938d9dz2.aspx .
Това показва как да стартирате тригер и да извикате CLR обект в проект.
Ефективно във вашия проект вие създавате тригер и го карате да извиква вашия клас.
Обърнете внимание на реда:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
Това определя кога кодът се задейства, след което в рамките на кода можете да проверите вашето ограничение, след това да задействате останалата част от метода (или не) или да извикате друг object.method
колкото е необходимо.
Основната разлика между отиването директно в базата данни и добавянето на тригер е, че това ви дава достъп до всички обекти във вашия проект, когато се внедряват заедно.