我有class Board
代表董事会,其上有一些部分。这些部分由namedtuple
表示,并存储在属性_pieces
中,该属性只是一个字典(其键是板上的位置,其值是片段)。
Board
有一个方法get_rectangle
,它应该在棋盘上的指定矩形中返回位置和片段的副本。它只是通过创建并返回一个具有适当过滤位置的新字典来实现。
很久以后,在重构过程中,片段从namedtuple
变为class
并变得可变。这会导致一个棘手的错误:从get_rectangle
返回的字典不再是副本(它与棋盘共享碎片对象)。
当然,在发现此错误后,它很容易修复。但是有哪些技术可以避免这个问题呢?原设计有没有明显的问题?