Как окуклить вложенную БД, не повреждая инкапсуляцию? - PullRequest
1 голос
/ 12 июня 2019

У меня следующая ситуация (код 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 заключается не в обновлении БД, а скорее в представлении некоторого объекта.


Это выглядит как очень распространенная проблема дляя, и я уверен, что есть некоторые стандартные рекомендации для этого.

Какой хороший способ заполнить вложенную БД из соответствующей структуры вложенных объектов, которая не нарушает инкапсуляцию?

...