Sprite와 SpriteAnimator의 두 클래스가있는 일종의 그래픽 애니메이션 코드가 있다고 가정 해 보겠습니다. SpriteAnimator는 스프라이트를 일정한 간격으로 이동시킵니다. 스프라이트에는 움직임을 막을 수있는 속성이 있습니다.Tell, do not ask principle - 여기에 적용해야합니까?
내가 먼저 이런이 사용 사례 구현 :
public class Sprite
{
public bool Locked;
public void MoveTo(int x, int y){}
}
public class SpriteAnimator
{
private List<Sprite> Sprites;
public void DoMovement()
{
foreach (Sprite sprite in Sprites)
{
if (!sprite.Locked) MoveTo(newX, newY);
}
}
}
을 ...하지만 나는 Tell-don't ask principle을 기억하고, 내가 결정을, 상태에 대한 요구하고 무엇을 그들에게있어 기분이 - 원리가 저를 금지하는 것처럼. 따라서 나는 다음과 같이 코드를 다시 작성합니다.
..하지만 실제로 더 좋은 코드입니까? "If"라는 단어를 포함하는 메소드 이름에 대해 어떻게 생각하는지 모르겠습니다.
컨트롤러에는 스프라이트의 잠긴 상태에 대한 소유권이있는 세 번째 옵션이 있습니다. 이런 식으로 뭔가 : 나는 O (N^2) 루프를 먹을수록 이것은 성능에 영향을
public class Sprite
{
public void Move(int x, int y) { ... }
}
public class SpriteAnimator
{
private List<Sprite> Sprites;
private List<Sprite> LockedSprites;
public void DoMovement()
{
foreach (Sprite sprite in Sprites)
{
if (!LockedSprites.Contains(sprite) MoveTo(newX, newY);
}
}
}
...하지만.
그럼 너희들은 어떻게 생각하니? 실용 주의적이고 선택권 # 1을 선택할 때가 좋습니까?하지만 최고라고 말하면서 말하지 말고 말하지 마십시오.