Я работаю с командой над новым API Java для одного из наших внутренних проектов. Вероятно, мы не сможем потратить время на то, чтобы остановить и отобразить все детали интерфейсов Java и получить их на 100% в начале.
У нас есть некоторые основные функции, которые должны быть впереди, и другие, которые, вероятно, будут добавлены позже с течением времени, но теперь не важны, + время, затраченное на разработку этих функций, теперь роскошь, которую мы не делаем иметь. Тем более, что у нас недостаточно информации, чтобы получить все детали дизайна.
Java-подход к API-интерфейсам заключается в том, что как только вы публикуете интерфейс, он эффективно неизменен, и вы не должны его изменять.
Есть ли способ планировать эволюцию API с течением времени? Я читал этот вопрос, и я предполагаю, что мы могли бы это сделать:
// first release
interface IDoSomething
{
public void hop();
public void skip();
public void jump();
}
// later
interface IDoSomething2 extends IDoSomething
{
public void waxFloor(Floor floor);
public void topDessert(Dessert dessert);
}
// later still
interface IDoSomething3 extends IDoSomething2
{
public void slice(Sliceable object);
public void dice(Diceable object);
}
а затем обновите наши классы от поддержки IDoSomething
до IDoSomething2
, а затем IDoSomething3
, но, похоже, проблема с запахом кода.
Тогда я предполагаю, что способ Guava для маркировки интерфейсов с @Beta
, чтобы приложения могли использовать их под угрозой, прежде чем они будут заморожены, но я не знаю, правильно ли это.