@synapse_people

Как правильно разделить API и реализацию?

Здравствуйте!
Имеется 2 проекта: core-api, core-impl. В API у меня лежат наборы интерфейсов, а в impl реализация этих интерфейсов. Пакет у них общий - test.core.
В связи с этим вопрос-правильно ли это?
Возьмем на примере класса-конфигурации...
Интерфейс в пакете test.core проект core-API:
public interface ICfg {

	public static final class AttrKey<V> {

		private final String name;
		private final Class<V> dataType;

		private AttrKey(String name, Class<V> dataType) {
			super();
			this.name = name;
			this.dataType = dataType;
		}

		public String getName() {
			return name;
		}

		public Class<V> getDataType() {
			return dataType;
		}

		public static <V> AttrKey<V> newKey(String name, Class<V> dataType) {
			return new AttrKey<V>(name, dataType);
		}
	}

	public interface Attribute<V> {

		public Optional<V> getValue();

		public void setValue(V value);
	}

	public <V> Attribute<V> attr(AttrKey<V> key);
}

Имеет сам интерфейс, а также сразу класс AttrKey...
А также ConfigImpl в пакете test.core проекта core-impl:
public final class Config implements ICfg {

	private final Map<String, Object> values = new HashMap<>();

	private Config() {
	}

	public static ICfg newInstance() {
		return new Config();
	}

	@Override
	public <V> Attribute<V> attr(AttrKey<V> key) {

		return new Attribute<V>() {

			@Override
			public Optional<V> getValue() {

				final V value;

				value = key.getDataType().cast(values.get(key.getName()));

				return Optional.of(value);
			}

			@Override
			public void setValue(V value) {

				values.put(key.getName(), value);
			}

		};
	}

}

Подскажите, правильно ли это?
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы