Это отличный вопрос, но нет ответа, который применим ко всем случаям.Это будет зависеть от того, как выглядит ваш код.Как правило, следует избегать избыточности, но иногда хуже чрезмерно спроектировать ваш код и попытаться поместить его в блок, в который он на самом деле не вписывается.
В вашем случае вы определенно могли бы извлечь выгоду из общихкод и потянув его в общий метод.Похоже, что единственное различие между вашими методами заключается в части рендеринга, и было бы просто передать функцию рендеринга в ваш метод "mark".
Ваш метод "mark" будет выглядеть примерно так:
mark: function(embeddedAml, renderer) {
var return_string,
first_split,
element_count,
second_split;
return_string = '';
first_split = embeddedAml.split( ViewH.MARK.ROW );
for( element_count=0; element_count < first_split.length; element_count++)
{
second_split = first_split[element_count].split( ViewH.MARK.FIELD );
return_string = return_string + renderer(second_split);
}
return return_string;
}
Вы бы сохранили методы закладок и твитов, но они также изменились бы:
bookmark: function (embeddedAml) {
return this.mark(embeddedAml, function(data) {
return '<img name="bo_im" class="c" src="' +
'http://www.google.com/s2/favicons?domain=' +
data[0] +
'" onerror="Arc.BookmarkError(this)"><a target="_blank" name="bookmark_link" class="b" href = "' +
data[1] + '">' +
data[2] + '</a>'
});
}
Теперь ваш код рендеринга (единственный код, который отличался) контролируется независимо, но кодэто перекрытие находится в общем месте, и если оно меняется, вам нужно обновить его только в одном месте.