Предположим, у вас есть библиотека, которая разработана на двух уровнях: ядро, низкоуровневое и высокоуровневое. Мой дизайн сфокусирован на уменьшении сцепления между ними.инкапсулировать перечисления или нет?
Одна из подпрограмм уровня высокого уровня принимает перечисление (скажем, FOO = 0, BAR = 1, BAZ = 2). Это перечисление используется непосредственно подпрограммами низкого уровня для его конечных целей.
Для разработки этого, у меня есть три варианта:
- Процедура высокого уровня принимает перечисление инкапсулированного в модуль высокого уровня, и переводит один-к-одному на перечислении высокого уровня в перечисление низкого уровня значения. Преимущества: нижняя муфта. Недостатки: я повторяю себя
- Процедура высокого уровня принимает значения перечисления модуля нижнего уровня и передает его «как есть». Преимущества: меньше набрав, меньше дублирования. Недостатки: более высокое сцепление.
- Я создаю «модуль перечисления», который является внешним, и оба уровня зависят от этого модуля перечисления. Преимущества: концептуальная ясность. Недостатки: Uber catch-all модуль с перечислениями, которые не близки к их коду.
Есть ли у вас опыт в этом деле? Я бы пошел с 1, поскольку он уменьшает сцепление, но я хотел бы также услышать ваш опыт.