Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Shaun я ответил бы на Ваши вопросы этот путь:
реклама 1) Картопостроитель ответственен за создание Потребительского объекта. Ваш объект Картопостроителя будет иметь что-то как метод RetrieveById (например). Это признает, что идентификатор и так или иначе (that't он ответственность объекта Картопостроителя) создает допустимый Потребительский объект. То же верно другой путь. Когда Вы называете Картопостроитель. Метод обновления с допустимым Потребительским объектом, объект Картопостроителя ответственен за проверку, что все соответствующие данные сохраняются (везде, где соответствующий - дб, память, файл, и т.д.)
реклама 2), Как я отметил выше, получают/сохраняют, методы на объекте Картопостроителя. Это - своя обязанность обеспечить такую функциональность. Поэтому LoadAll, SaveAll (вероятно, передающий массив объектов значения) являются действительными методами Картопостроителя.
реклама 3) я сказал бы да. Но можно разделить различные аспекты объектов Картопостроителя в отдельные классы (если Вы хотите к): значения по умолчанию, проверка правила, и т.д.
я надеюсь, что она помогает. Я действительно предлагаю/рекомендую, чтобы Вы прочитали книгу Martin Fowler Шаблоны Архитектуры приложений для предприятия .
Я предложил бы, чтобы Вы смотрели на инструмент O/R-mapper, прежде чем Вы попытаетесь реализовать шаблон Картопостроителя Данных сами. Это сохранит Вас много времени. Популярный выбор O/R-mapper NHibernate.
Вы могли проверить iBATIS.NET как альтернативу NHibernate. Это - также инструмент O/R, но я нашел, что это немного легче использовать, чем NHibernate.