Должны ли мои классы ограничивать разработчиков от неправильных действий с ними?

Я пытаюсь понять, где заканчиваются хорошие контракты и начинается паранойя. Правда, я просто не представляю, о чем должен заботиться хороший разработчик, а о чем - нет :)

Допустим, у меня есть класс, который хранит значение (значения), например java.lang.Integer. Его экземпляры агрегируются другими объектами (MappedObjects), (один ко многим или многие ко многим), и часто используются внутри методов MappedObjects. По соображениям производительности, я также отслеживаю эти отношения в TreeMap (guava MultiMap, неважно) в дополнение, чтобы иметь возможность получить быстрые итерации над MappedObjects, связанными с некоторым диапазоном Integer ключей. Итак, чтобы поддерживать систему в согласованном состоянии, я должен модифицировать метод MappedObject.bind(Integer integer) для обновления моей Map следующим образом:

class MappedObject {
    public void bind (Integer integer) {
        MegaMap.getInstance().remove(fInteger, this);
        fInteger = integer;
        MegaMap.getInstance().add(fInteger, this);
    }

    ...

    private Integer fInteger;
}

Я мог бы просто сделать абстрактный класс MappedObject с этим конечным методом, заставляя других наследоваться от него, но это грубо. Если я определю MappedObject как интерфейс с методом bind() и предоставлю скелетную реализацию -- другой разработчик может позже просто забыть включить его в объект и реализовать метод самостоятельно без обновления Map.

5
задан 0andvoid 30 November 2011 в 05:24
поделиться