У меня следующая ситуация (код python, но это не зависит от языка):
Мне нужно заполнить табличную БД способом, эквивалентным:
for i,a in enumerate(as):
for j,b in enumerate(a.bs):
for k,c in enumerate(b.cs):
db[i,j,k] = c.data()
ЭтоМетод вынуждает c публиковать свои личные данные, тем самым нарушая его инкапсуляцию.
Я знаю, что некоторые из этой цепочки могут быть заменены на a.update_db
, b.update_db
и так далее, но, по крайней мере, cвсе равно придется разрешить доступ к своим личным данным.
Еще один способ решения этой проблемы - позволить C обновлять БД следующим образом:
for i,a in enumerate(as):
for j,b in enumerate(a.bs):
for k,c in enumerate(b.cs):
c.update_db_at(i,j,k)
Что сделает Cзнаю i, j, k, о котором это не должно заботиться, и ответственность C заключается не в обновлении БД, а скорее в представлении некоторого объекта.
Это выглядит как очень распространенная проблема дляя, и я уверен, что есть некоторые стандартные рекомендации для этого.
Какой хороший способ заполнить вложенную БД из соответствующей структуры вложенных объектов, которая не нарушает инкапсуляцию?