- Cage 구조 개선
CageItemSlot 분할
임시로 만들어뒀던 Cage의 ItemSLot 부분을 CageItemController로 분할 해줬다.
기존에는 CageCardEffectController에서 Item까지 같이 관리하고 있었고
카드를 추가하는 부분들을 카드가 사용될때 직접 CageCardEffectController에 접근하고 있었다.
이런 식으로 중앙의 클래스를 거치지 않고 각각의 컨트롤러에 접근을 허용하는 경우
버그가 생겼을 때 문제가 되는 부분을 찾거나 새로운 기능을 추가하는 유지보수에 있어서
예상치 못한 추가적인 버그들이 생겨나고 계속해서 작업량이 늘어난다고 느꼈다.
그래서 그런 부분들을 해결하기 위해서 단일 책임의 원칙과 중앙의 클래스에서 메서드들을 호출하는 구조로 바꿔야
된다고 생각을 했고 클래스를 분할하고 수정하면서 다른 클래스에서는 Cage까지만 접근을 허용하고
Cage의 메서드를 호출하면 가지고있는 Controller들을 사용해서 여러 Controller들의 기능들을 조합해서
원하는 기능이 동작하도록 각각의 Controller들은 독립적이고 중앙의 Cage를 통해서만 완성된 기능들이 동작하는
구조를 만들기 위해서 계속해서 작업을 진행하고 있다.
public class Cage: MonoBehaviour
{
[SerializeField] public CageController cageController;
[SerializeField] public CageMonsterController cageMonsterController;
[SerializeField] public CageCardEffectController cageCardEffectController;
[SerializeField] public CageCameraController cageCameraController;
[SerializeField] public CageItemController cageItemController;
}
public async Task<bool> AddCard(CardSO so)
{
if (so.cardType == CardType.Item)
{
if (cageItemController.AddItem(so))
{
so.UseCard(this);
UpdateCageInfo();
return true;
}
}
else
{
return await cageCardEffectController.AddCardData(so, this);
}
return false;
}