Published on

June 29, 2002

Программирование на основе интерфейсов в SQL Server

При разработке системы обработки заработной платы важно иметь гибкое и адаптивное решение, которое может обрабатывать изменяющиеся бизнес-правила без необходимости обширных изменений кода и повторного развертывания. Один из подходов для достижения этой цели – использование программирования на основе интерфейсов.

Программирование на основе интерфейсов – это концепция, широко используемая в объектно-ориентированных языках, где различные типы объектов могут взаимодействовать друг с другом через определенный интерфейс. Хотя SQL Server не является объектно-ориентированным языком, мы все равно можем применить некоторые ключевые концепции программирования на основе интерфейсов к нашим решениям в SQL Server.

В SQL Server сам язык SQL служит интерфейсом к базовым структурам данных, используемым СУБД. Приложения могут отправлять SQL-запросы для извлечения данных из SQL Server, не нуждаясь в понимании механизмов хранения данных. Однако, когда речь идет о реализации сложных бизнес-правил, полагаться только на SQL-запросы может быть сложно.

Один из способов преодолеть эту проблему – использование хранимых процедур в SQL Server. Хранимая процедура – это фрагмент хранимого SQL-кода, который принимает определенный список параметров. Определив стандартный набор параметров для хранимой процедуры “правила”, мы можем легко заменять имена хранимых процедур для реализации различных бизнес-правил.

Например, предположим, у нас есть пять различных правил, которые должны быть реализованы в нашем приложении по обработке заработной платы. Мы можем создать пять различных хранимых процедур, все они принимают один и тот же список параметров:

CREATE PROCEDURE pr_PayrollRule_CalculateGrossPay @PayrollPeriod int, @PayrollGroupID int
CREATE PROCEDURE pr_PayrollRule_CalculateFICA @PayrollPeriod int, @PayrollGroupID int
CREATE PROCEDURE pr_PayrollRule_CalculateSocSecurity @PayrollPeriod int, @PayrollGroupID int
CREATE PROCEDURE pr_PayrollRule_CalculateStateTax @PayrollPeriod int, @PayrollGroupID int
CREATE PROCEDURE pr_PayrollRule_Calculate401k @PayrollPeriod int, @PayrollGroupID int

Затем мы можем создать таблицу конфигурации, в которой перечислены правила вместе с соответствующей хранимой процедурой и порядком выполнения:

CREATE TABLE tb_PayrollRule(
    PayrollRuleID int NOT NULL IDENTITY(1, 1),
    RuleName varchar(50) NOT NULL,
    RuleProcedure varchar(128) NOT NULL,
    ExecutionOrder int NOT NULL
)

INSERT INTO tb_PayrollRule(RuleName, RuleProcedure, ExecutionOrder) VALUES('Calculate Gross Pay', 'pr_PayrollRule_CalculateGrossPay', 1)
INSERT INTO tb_PayrollRule(RuleName, RuleProcedure, ExecutionOrder) VALUES('Calculate FICA Withholding', 'pr_PayrollRule_CalculateFICA', 2)
INSERT INTO tb_PayrollRule(RuleName, RuleProcedure, ExecutionOrder) VALUES('Calculate Social Security Withholding', 'pr_PayrollRule_CalculateSocSecurity', 3)
INSERT INTO tb_PayrollRule(RuleName, RuleProcedure, ExecutionOrder) VALUES('Calculate State Tax Withholding', 'pr_PayrollRule_CalculateStateTax', 4)
INSERT INTO tb_PayrollRule(RuleName, RuleProcedure, ExecutionOrder) VALUES('Calculate 401(k) Withholding', 'pr_PayrollRule_Calculate401k', 5)

Чтобы получить правильные процедуры для выполнения, мы просто можем выполнить запрос:

SELECT RuleProcedure FROM tb_PayrollRule ORDER BY ExecutionOrder

Основное приложение обработки может затем вызывать каждую процедуру в указанном порядке. Используя хранимые процедуры, мы получаем преимущества скомпилированных, многократно используемых планов выполнения в SQL Server. Если правило нужно изменить, мы легко можем написать и развернуть новую версию правила, выполнив оператор ALTER PROCEDURE.

Кроме того, хранимые процедуры позволяют выполнять транзакционную обработку. Основное приложение обработки может выполнять оператор BEGIN TRANSACTION перед выполнением первого правила и оператор COMMIT TRANSACTION или ROLLBACK TRANSACTION по завершении обработки.

Динамическое определение имен хранимых процедур для вызова во время выполнения также дает нам гибкость в выборе процедур для выполнения. Мы можем реализовать таблицы поиска, указать диапазоны даты действия для конкретных бизнес-правил и даже вызывать процедуры в различных базах данных или серверах.

Программирование на основе интерфейсов в SQL Server с использованием хранимых процедур предоставляет простое, самодостаточное и гибкое решение для обработки сложных бизнес-правил в системе обработки заработной платы. Оно позволяет легко настраивать и адаптировать систему без необходимости обширных изменений кода и повторного развертывания.

Об авторе: Крис Кубли – MCSD с более чем четырехлетним опытом разработки и реализации решений на основе SQL Server в различных отраслях. С ним можно связаться по адресу ccubley@queryplan.com.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.