Analysis problems
class name 그대로 상태 값을 저장하고 관리하는 클래스
면밀히 분석해 보면 다음의 요구사항에 따른 행위를 하고 있는 걸 파악할 수 있음
method는 모두 public이며 각 method 별 사용 용도 분석 필요
- LevelUp_Wheel
- LevelUp_Click
- LevelUp_Auto
- AddGold
- CostGold
To do
Analysis results
Level up을 하는 행위와 gold가 추가되고 소비되는 행위는 연관성이 있지만 별도로 관리할 필요가 있음
Level up의 필요조건이 gold이므로 gold는 캡슐화가 되는 것이 좋으며
MyStatus라는 이름 보다는 Level 이라는 이름이 좋음
따라서 다음과 같은 설계를 제안
Interface design
Behaviours: 레벨업을 할 수 있는 행위 나열
enum Behaviours
{
wheel,
click,
auto
}
ILevel interface는 LevelUp public operation을 노출하며 Behaviours enum 값을 요구함
Behaviours에 따른 레벨의 값을 얻을 수 있는 GetCurrent()를 노출, 역시 Behaviours를 요구함
interface ILevel
{
void Up(Behaviours behaviour);
int GetCurrent(Behaviours behaviour);
}
IRequiredLevel은 ByBehaviours()를 노출
Behaviours에 따라 요구하는 gold 소비량을 얻을 수 있음
interface IRequiredLevel
{
int ByBehaviours(Behaviours behaviour);
}
IGoods interface는 상품을 뜻하며 그 속성으로 골드 값을 가지고 있음
int type의 양만큼 Gold를 추가/삭제 해서 현재 Gold의 양을 나타낼 수 있음
interface IGoods
{
int Gold { get; set; }
}
이 정도 인터페이스 설계를 통해 구현을 진행하고
MyStatus와 함께 엄청난 coupling을 자랑하는 코드들에 대해 refactoring을 진행
LevelUp_Wheel
/// <summary>
/// 레벨업 휠 캐릭터
/// </summary>
/// <param name="gold"></param>
/// <returns></returns>
public int LevelUp_Wheel(int gold)
{
CostGold(gold);
return ++level_wheel;
}
다음 레벨업에 필요한 골드를 소비하고 level_wheel의 값을 1 증가시킴
CostGold method의 분석 필요
CostGold
DTO.cs 파일에서만 호출하는 메서드임에도 불구하고 public으로 선언 => private 변경 필요
return 값으로 float를 정의하고 있지만 실제 사용하고 있지 않음 => void로 변경 필요
deep하게 분석해 보면 결국 gold의 값을 파라미터의 값 만큼 빼는 역할을 하는데, 그냥 gold 필드의 값을 빼는 코드만 있다면 CostGold는 필요 없음 => 삭제
Analysis problems
class name 그대로 상태 값을 저장하고 관리하는 클래스
면밀히 분석해 보면 다음의 요구사항에 따른 행위를 하고 있는 걸 파악할 수 있음
method는 모두 public이며 각 method 별 사용 용도 분석 필요
To do
Analysis results
Level up을 하는 행위와 gold가 추가되고 소비되는 행위는 연관성이 있지만 별도로 관리할 필요가 있음
Level up의 필요조건이 gold이므로 gold는 캡슐화가 되는 것이 좋으며
MyStatus라는 이름 보다는 Level 이라는 이름이 좋음
따라서 다음과 같은 설계를 제안
Interface design
Behaviours: 레벨업을 할 수 있는 행위 나열
ILevel interface는 LevelUp public operation을 노출하며 Behaviours enum 값을 요구함
Behaviours에 따른 레벨의 값을 얻을 수 있는 GetCurrent()를 노출, 역시 Behaviours를 요구함
IRequiredLevel은 ByBehaviours()를 노출
Behaviours에 따라 요구하는 gold 소비량을 얻을 수 있음
IGoods interface는 상품을 뜻하며 그 속성으로 골드 값을 가지고 있음
int type의 양만큼 Gold를 추가/삭제 해서 현재 Gold의 양을 나타낼 수 있음
이 정도 인터페이스 설계를 통해 구현을 진행하고
MyStatus와 함께 엄청난 coupling을 자랑하는 코드들에 대해 refactoring을 진행
LevelUp_Wheel
다음 레벨업에 필요한 골드를 소비하고 level_wheel의 값을 1 증가시킴
CostGold method의 분석 필요
CostGold
DTO.cs 파일에서만 호출하는 메서드임에도 불구하고 public으로 선언 => private 변경 필요
return 값으로 float를 정의하고 있지만 실제 사용하고 있지 않음 => void로 변경 필요
deep하게 분석해 보면 결국 gold의 값을 파라미터의 값 만큼 빼는 역할을 하는데, 그냥 gold 필드의 값을 빼는 코드만 있다면 CostGold는 필요 없음 => 삭제