Возможная круговая зависимость выходит с приложением PHP

Вы можете использовать , чтобы уменьшить , чтобы построить новый массив, имея lodash, чтобы проверить, нашли ли вы уже то же подмножество.

const data = [{
    subsets: [{
        start: '0020', end: '007G',
    }, {
        start: '0020', end: '007F',
    },{
        start: '0020', end: '007G',
    }],
    fontFormat: 'woff2',
    src: 'estPath1/',
},{
    subsets:[{
        start: '0020', end: '007F',
    },{
        start: '0020', end: '007G',
    },{
        start: '0020', end: '007G',
    }],
    fontFormat: 'woff',
    src: 'estPath2/',
}];

const merge = (data) =>
    
    data.reduce((acc, { subsets, fontFormat, src }) => {

        const found = acc.find(({ subset }) => 
            _.isEqual(
                _.sortedIndexBy(subset, ({ start, end }) => start - end), 
                _.sortedIndexBy(subsets, ({ start, end }) => start - end))
            );

        if (!found) acc.push({ subset: subsets, webFontList: [{ fontFormat, src }] });

        else found.webFontList.push({ fontFormat, src });
        
        return acc;
    },
    []);

console.log(merge(data));

7
задан Matt Refghi 12 October 2008 в 04:03
поделиться

4 ответа

Не расширяйте LogManager, позволяйте ему быть составным типом. И задержите выбор того, где Вы хотите зарегистрироваться, т.е.:

$logManager = new LogManager();
$dbSession = new DbSession($logManager);
$logManager->add(new FileLog($filename) );
$logManager->add(new DBLog($dbSession) );

Где, конечно, FileLog и DBLog совместно используют единый интерфейс. Это - приложение шаблона The Observer, где добавляют (), "подписать" операция, и FileLog/DBLog являются наблюдателями регистрирующихся событий. (Таким образом Вы могли также сохранить, входит в систему много мест.)

Редактирование Owen: скорректированный к php синтаксису.

8
ответ дан 6 December 2019 в 19:44
поделиться

Одному из этих объектов на самом деле не нужен другой: Вы предположили это, это - DBSession. Измените тот объект так, чтобы регистратор мог быть присоединен к нему после конструкции.

2
ответ дан 6 December 2019 в 19:44
поделиться

Почему спрос, которому LogManager возражает для создания объекта DbSession, если он только иногда пишет в файлы? ленивая загрузка это вместо этого только, когда Вам нужен он. Кроме того, по-моему, оба должны быть независимыми друг от друга. Каждый мог инстанцировать другой при необходимости.

2
ответ дан 6 December 2019 в 19:44
поделиться

Возможно, можно применить некоторый шаблон, как Шаблон "одиночка", чтобы гарантировать, чтобы у Вас только был один экземпляр Вашего класса LogManager, например.

1
ответ дан 6 December 2019 в 19:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: