Stanislav Ievlev <stanislav.iev...@gmail.com> wrote:

> 
> 
> После прочитывания показалось, что metaalterator не должен быть бакендом, 
> собственно это и не бакенд - это моделирование данных. Есть
> определённый смысл оформить его как библиотеку guile.

    Почему не бакенд? БД традиционно называют бакендом, а я его начинал
писать как маленькую БД. :))

> Вообще задача моделирования очень сложная - мы кажется уже делали два или три 
> захода - ничего путного не получилось. Очень хочется чтобы
> metaalterator стал-таки средством моделирования в alterator ;)

  А что за заходы? Можно ткнуть носом?.. :)

> 
> 
> 13 апреля 2009 г. 19:06 пользователь Pavel Wolneykien <mano...@altlinux.org> 
> написал:
> 
>                                                                               
>           Всем привет, :)                             
>                               При использовании (alterator metalterator) и 
> ajax.scm возникает (по                             крайней
>                              мере у меня возник) соблазн вовсе не 
> использовать промежуточный                             бакенд. Это,
>                              наверное, нормальная реакция человеческого 
> организма на                             многозвенную
>                              архитектуру. Но я не стал этого делать. А вместо 
> этого                             постарался
>                              отвести бакенду достойную роль.                  
>            
>                               Получилось у меня следующее.                    
>          
>                               1. Бакенд закрывает метабакенд от произвольного 
> к нему доступа.                             
>                               Ведь через метабакенд можно читать и писать 
> произвольные объекты, в                             том
>                              числе, и не предусмотренные конкретным модулем 
> Альтератора.                             
>                               Кроме лишних объектов метабакенду можно 
> отправить и просто                             некорректные
>                              (с точки зрения работы конкретного модуля) 
> данные. А                             проверкой
>                              данных на корректность у нас тоже традиционно    
>                          занимается
>                              бакенд.                             
>                               2. Бакенд отвечает на запросы "type" и 
> производит другого рода                             проверку
>                              корректности данных.                             
>                               А ещё в интерфейс часто нужно выводить 
> какой-либо набор констант,                             причём
>                              с комментариями на местном языке. Для этой цели 
> тоже можно                             использовать
>                              бакенд.                             
>                               3. Бакенд отвечает на запросы о константах.     
>                         
>                              
>                               Вторая и третья задача решаются традиционными 
> способами, а первая                             требует
>                              непропорционально увесистого куска кода: 
> использовать большой                             набор
>                              условных операторов перед проксированием 
> операции чтения/записи в                             метабакенд
>                              (где она, фактически, и будет выполнена) 
> показалось мне                             скучным. Поскольку
>                              речь идёт об определении некоторого шаблона, 
> через                             который
>                              определённые вызовы проходили бы, а определённые 
> -- нет                             (выдавалось
>                              бы сообщение об ошибке), то я придумал набор 
> макросов,                             позволяющий
>                              описать такой шаблон в более компактном виде.    
>                          Называется он
>                              woo-case.                             
>                               Формат его вызова такой:                        
>      
>                               (woo-case (список_объектов список_параметров)   
>                            
>                              ((имя_операции_1 (шаблон_объектов_1) 
> [(шаблон_параметров_1)])                              
>                              вычисление_1 ...)                                
>  ((имя_операции_2 (шаблон_объектов_2)
>                              [(шаблон_параметров_2)])                         
>         вычисление_2 ...)                              
>                              ...                                else 
> вычисление_по_умолчанию)                             
>                               Шаблон объектов используется при выполнении 
> двух действий:                             сличения
>                              списка объектов и захвата параметров.            
>                  
>                               Вместо того, чтобы просто обозначить в шаблоне 
> место, где могут                             находится
>                              одно                             
>                               ('squid 'groups ? 'domains ?)                   
>           
>                              или более имён                             
>                               ('squid 'groups *)                             
>                              можно обозначить эти пропуски символами, а затем 
> использовать эти                             символы
>                              в программе:                             
>                               ('squid 'groups @g 'domains @d)                 
>             
>                              после сличения, например, с таким списком: 
> ('squid 'groups "wheel"                             'domains
>                              "altlinux"), переменные @g и @d примут значения 
> "wheel" и                             "altlinux"
>                              соответственно. Шаблонный параметр вида @имя 
> захватывает 1                             значение,
>                              а вида @@имя одно и более значений.              
>                
>                               Шаблон параметров, в отличие от шаблона 
> объектов, может быть опущен, а                             при
>                              его наличии он используется только для захвата 
> параметров, но не для                             сличения. Поэтому
>                              порядок перечисления параметров в шаблоне 
> параметров                             произвольный. Поскольку
>                              каждый параметр в списке параметров однозначно   
>                           связан с
>                              впередистоящим именем, то параметр вида @@имя 
> используется для                             захвата
>                              всех значений одного параметра, а вида @имя -- 
> для захвата                             только
>                              1, первого значения. Например, шаблон            
>                  
>                               ('http_port @p 'auth-mode @a 'internal-ifaces 
> @@e 'mode @m)                             
>                              сохранит под именем @@e все значения параметра 
> 'internal-ifaces, а                             значение
>                              параметра 'mode он не "съест".                   
>           
>                               В том случае, если какой либо из обозначенных 
> параметров не был                             указан,
>                              то значение соответствующей переменной будет 
> равно #f.                             
>                              
>                               И последнее, но немаловажное: если какая-либо 
> переменная вида @имя                             (или
>                              @@имя) уже была определена в результате 
> предыдущей операции                             сличения/захвата,
>                              то в следующем шаблоне будет использовано _её    
>                          значение_. Таким
>                              образом, во вложенных конструкциях woo-case 
> можно                             использовать
>                              значения, определённые внешними шаблонами -- 
> получатся                             контекстно-зависимые
>                              шаблоны.                             
>                               Павел.                             
> _______________________________________________                             
> devel-conf
>                              mailing list                             
> devel-conf@lists.altlinux.org                             
> https://lists.altlinux.org/mailman/listinfo/devel-conf
> 
> 
> 
> _______________________________________________
> devel-conf mailing list
> devel-conf@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/devel-conf
_______________________________________________
devel-conf mailing list
devel-conf@lists.altlinux.org
https://lists.altlinux.org/mailman/listinfo/devel-conf

Ответить