Постусловие определяет, какое состояние вашего приложения (или объекта, в зависимости от уровня абстракции) должно быть после операции, чтобы оно считалось успешным.Например, для операции readEmployee
постусловие будет следующим:
- создается новый экземпляр
Employee
. - экземпляр
Employee
содержит соответствующие атрибутызначения базы данных. - соединение с базой данных закрыто.
Мне нравится думать о «предусловии» и «постусловии» как о «состоянии ума» вашегоприложение до и после выполнения операции, соответственно.Как вы можете себе представить, это больше мыслительный процесс, чем упражнение по кодированию, когда вы выполняете DbC.
(Если вы проводите модульное тестирование, состояния проясняют, что должно охватываться вашими тестами. В основномвы заканчиваете тем, что тестируете «состояние ума» вашего приложения.)
Интересно, что если вы подумаете об обратном DbC, вы поймете, что для определения того, какие операции должно предоставлять ваше приложение (или объект)это просто вопрос перечисления, какие состояния он может иметь и как он переходит между этими состояниями.Действия, которые вам нужно предпринять, чтобы сделать эти переходы, затем становятся вашими операциями, и вам не нужно беспокоиться о выполнении операций, которые не приводят к каким-либо желаемым состояниям.Так, например, вам, вероятно, нужны следующие состояния для вашего приложения.
- Добавлены данные сотрудника (S1)
- Загружены данные сотрудника (S2)
- Данные сотрудникаобновлено (S3)
- Данные сотрудника удалены (S4)
Возможны следующие изменения состояния.
- S1 -> S3 (добавить нового сотрудника,обновить данные)
- S1 -> S4 (добавить нового сотрудника, удалить сотрудника)
- S2 -> S3 (загрузить данные сотрудника, обновить данные сотрудника)
- S2 -> S4 (загрузить данные сотрудника, удалить сотрудника)
- S4 -> S1 (удалить сотрудника, добавить нового сотрудника)
- S2 -> S1 (загрузить данные сотрудника, добавить нового сотрудника)
- S3 -> S1 (обновить данные сотрудника, добавить нового сотрудника)
- S3 -> S2 (обновить данные сотрудника, загрузить данные сотрудника)
Исходя из вышеизложенного, выможет записывать ваши операции так, чтобы разрешались только допустимые переходы, а все остальное приводило к ошибкам.
Невозможные переходы состояний:
- S4 -> S2 (невозможно удалить сотрудника, затем загрузить его данные)
- S4 -> S3 (не удается удалить сотрудника,затем обновите их данные)
Моделирование состояний, вероятно, является наиболее важной частью проектирования объектов, поэтому вы задаете правильные вопросы.Если вам нужен хороший ресурс по моделированию состояний, получите Объектные жизненные циклы моделирования мира в состояниях от Салли Шлаер / Стивена Меллора.Это довольно старая книга и почти ничего не стоит на Amazon, но принципы, которые она вводит, составляют основу современного UML - кстати, обозначения, используемые в книге, не похожи на UML.
Я понимаю, что я этого не делалзатронуть состояние базы данных, но на концептуальном уровне уровень базы данных - это просто еще одна система состояний, и применяются те же принципы.
Надеюсь, это было полезно.