EDIT: меня не волнует, что вас вызвали в неправильном порядке, так как это обеспечивается с помощью нескольких интерфейсов, я просто беспокоюсь о том, что метод терминала вообще вызван.
Я использую шаблон построителя для создания разрешений в нашей системе. Я выбрал шаблон строителя, потому что безопасность важна в нашем продукте (в нем участвуют несовершеннолетние, поэтому COPPA и др.), Я чувствовал, что необходимо, чтобы разрешения были удобочитаемыми и считали, что удобочитаемость имеет первостепенное значение (т.е. Использует шаблон построителя в свободном стиле, а не одну функцию с 6 значениями).
Код выглядит примерно так:
permissionManager.grantUser( userId ).permissionTo( Right.READ ).item( docId ).asOf( new Date() );
Методы заполняют частную резервную копию bean, что после того, как терминалный метод (например, asOf) передает разрешение на базу данных; если этот метод не вызван, ничего не происходит. Иногда разработчики забывают вызвать метод терминала, который не вызывает ошибки компилятора, и легко пропустить быстрый просмотр/снятие кода.
Что я могу сделать, чтобы предотвратить эту проблему? Я бы не хотел возвращать объект Permission, который должен быть сохранен, поскольку это добавляет больше шума и упрощает чтение кода, отслеживание и понимание.
Я подумал о том, чтобы поставить флаг на подложке, который будет отмечен командой терминала. Затем проверьте флаг в методе finalize
и напишите в журнал, если объект был создан без сохранения. (Я знаю, что finalize
не гарантированно работает, но это лучшее, что я могу придумать.)