Разработка сложных Web-приложений на примере Microsoft Active Server Pages

       

API для использования SQL-шаблонов


    Работу с SQL-шаблонами  будет осуществлять специально написанный унифицированный объект 2nd tier. А в ASP стандартная библиотека Project ASP API будет предоставлять удобную оболочку (адаптер) для этого объекта. Пусть этот адаптер называется EntityManager. Упрощенно, он должен предоставлять все те же 4 DML функции: SELECT, UPDATE, INSERT, DELETE.  Часто предлагается  использовать другие названия, чтобы подчеркнуть, что это уже не SQL, а абстрактная сущность уровня бизнес-логики.  "SELECT" называют, например, "Get", "UPDATE" -> "Amend", "INSERT" -> "New" или "Create", "DELETE" -> "Remove". Ограничения, также, накладывает используемый язык программирования. Например,  в JScript "delete" является зарезервированным словом и его нельзя использовать как имя. 

    "SELECT" можно разделить на 2 метода. Один возвращает единичную строку выборки. А второй возвращает объект-итератор, через который можно получить многострочную выборку. В JScript и PerlScript достаточно просто реализуется динамическое создание нового типа объекта и его возврат как результат метода. В обоих случаях "SELECT"-методов, атрибуты возвращаемого объекта будут соответствовать OUT-переменным SQL-шаблона. А, в случае многострочной выборки, объект будет дополнительно содержать  стандартные, для итератора, методы next() и eof(). Никто не запрещает также предложить другие удобные в работе методы. 

    Вот пример списка методов класса EntityManager: 



selectOne(entity_name, template_name, arg1, arg2, ..., argN) Этот метод получает имя сущности, имя шаблона и список входных параметров шаблона. Как результат, возвращается объект, содержащий  выходные параметры шаблона в виде своих атрибутов. В JavaScript это реализуется при помощи функции eval(): например так:

s = "this.sFirstName='"+sFirstName+"';\n";

s += "this.sLastName=...

...

obj = eval("new function(){ "+s+" } ");

return obj;

Все эти механизмы скрывает адаптер EntityManager.

Он взаимодействует с 2nd tier объектом, который может  передавать сразу все полученные атрибуты в виде пригодной для eval() строки. Таким образом будет экономится время на вызовы 2nd tier (все атрибуты будут получены одним вызовом) и на формирование JScript-объекта.

selectSet(entity_name, template_name, arg1, arg2, ..., argN) Этот метод возвращает объект-итератор, атрибуты которого аналогичны описанным для selectOne(), а методы стандартны для итераторов: next(), eof(), и close()
selectAttr(entity_name, template_name, arg1, arg2, ..., argN) Возвращает значение первого выходного параметра шаблона (для простейших SELECT-выражений, выбирающих 1 значение)
exists(entity_name, template_name, arg1, arg2, ..., argN) Возвращает TRUE/FALSE при наличии/отсутствии результирующих строк у SQL-шаблона типа SELECT
update(entity_name, template_name, arg1, arg2, ..., argN) Реализует DML-команду UPDATE 
insert(entity_name, template_name, arg1, arg2, ..., argN) Реализует DML-команду INSERT 
remove(entity_name, template_name, arg1, arg2, ..., argN) Реализует DML-команду DELETE 
close() деструктор объекта EntityManager
<

Содержание раздела