powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / DRY проблема
4 сообщений из 4, страница 1 из 1
DRY проблема
    #38147090
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у нас в коде вот такие повторяющиеся коды:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var Element = function() {
   // содержит всякие простые данные, например строковые или числовые, например: count: 16
   var options = { .. };
  
   // содержит всякие привязки к UI, например кнопочки
   var ui = {...};

   // содержит функции, которые оперируют с полями объектов options и ui
   var methods = {
      ... 
   };
};

// Регистрируем элемент
Elements.add("MyElement", Element);

...

// Создаем элемент
Elements.createMyElement();



В идеале, хотелось бы делать как-то вот так:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
Elements.add("MyElement", {
   options: {...},
   ui: {...},
   methods: {.. /* работает с options и ui */ ..}
});

Elements.createMyElement();



но что-то до сих пор не могу придумать, как такое реализовать. Потому спрашиваю, это возможно?

То есть тут получается нужно ленивое вычисление методов, ибо в них основная проблема, ui и options не зависят друг от друга.
...
Рейтинг: 0 / 0
DRY проблема
    #38147757
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граждане! Подскажите хоть что-нибудь!
...
Рейтинг: 0 / 0
DRY проблема
    #38147783
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сторонними фреймворками пользуешься? - В jQuery так это и реализовано.
А если ручками, то типа такого можно:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var Elements = function(){
    function add(name){
        var argsLength = arguments.length;
        for (var i = 0; i < argsLength; i++){
            //тут анализируем аргументы на принадлежность их объектам (или массивам) и что куда относить
            //далее создаем требуемый объект Element
            //аргумент под номером 0 - это name, надо не забыть проверку поставить
        }
    }
}


Не знаю, правильно ли я понял вопрос: сделать заполнение параметров динамическим и упростить работу с объектом.
...
Рейтинг: 0 / 0
DRY проблема
    #38148544
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

Нет, не совсем.
Вот например:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
var FirstElement = function() {
   var options = { 
       updatePeriod: 10,
       itemsPerPage: 15
   };
  
   // содержит всякие привязки к UI, например кнопочки
   var ui = {
       reloadButton: $("#reloadButton"),
       nextPageButton: $("#nextPage")
   };

   // содержит функции, которые оперируют с полями объектов options и ui
   var methods = {
         initialize: function() {
              methods.loadPage();

              ui.reloadButton.click(function(event) {
                   methods.loadPage();
              });
         },
         loadPage: function() {
              $.get('http://mysite.com/api/get-page?page=' + options.itemsPerPage, function(response)  {
                  ...
              });
         }
   };
};

Elements.register('FirstElement', FirstElement);

...

Elements.createFirstElement(..);



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
var SecondElement = function() {
   var options = { 
       theme: 'major',
       feed_size: 10
   };
  
   // содержит всякие привязки к UI, например кнопочки
   var ui = {
       addNewsButton: $("#addButton"),
   };

   // содержит функции, которые оперируют с полями объектов options и ui
   var methods = {
         initialize: function() {
              methods.loadNews();

              ui.addButton.click(function(event) {
                   ...
              });
         },
         loadNews: function() {
              $.get('http://mysite.com/api/get-news', function(response)  {
                  ...
              });
         }
   };
};

Elements.register('SecondElement', SecondElement);

...

Elements.createSecondElement(..);



Хочется "упростить" до вот такого:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Elements.register('FirstElement', {
    options: { 
       updatePeriod: 10,
       itemsPerPage: 15
   },
   ui: {
       reloadButton: $("#reloadButton"),
       nextPageButton: $("#nextPage")
   },
   methods: {
         initialize: function() {
              methods.loadPage();

              ui.reloadButton.click(function(event) {
                   methods.loadPage();
              });
         },
         loadPage: function() {
              $.get('http://mysite.com/api/get-page?page=' + options.itemsPerPage, function(response)  {
                  ...
              });
         }
   }
});

...

Elements.createFirstElement(..);



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Elements.register('SecondElement', {
   options: { 
       theme: 'major',
       feed_size: 10
   },
   ui: {
       addNewsButton: $("#addButton"),
   },
   methods: {
         initialize: function() {
              methods.loadNews();

              ui.addButton.click(function(event) {
                   ...
              });
         },
         loadNews: function() {
              $.get('http://mysite.com/api/get-news', function(response)  {
                  ...
              });
         }
   }
});

...

Elements.createSecondElement(..);
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / DRY проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]