Swing을 사용하여 Java로 학교 그룹 프로젝트를 시작하고 있습니다. 데이터베이스 데스크톱 앱의 간단한 GUI입니다.
교수는 작년 프로젝트에서 코드를 제공하여 그가 어떻게 작동하는지 확인할 수있었습니다. 저의 첫 인상은 코드가 생각보다 훨씬 복잡하다는 것입니다. 그러나 프로그래머는 단지 그들이 작성하지 않은 코드를 볼 때 이것을 생각한다고 생각합니다.
그의 시스템이 좋은지 나쁜지를 찾는 이유가 있습니다. (교수에게 물었고 나중에 더 좋은 이유에 대해서는 나중에 보겠다고 말했습니다.)
기본적으로 지속 가능한 객체, 모델 (비즈니스 로직) 및 뷰 간의 연결을 피하기 위해 모든 것은 문자열로 수행됩니다. 데이터베이스에 저장되는 지속 가능한 객체는 문자열의 해시 테이블이며 모델과 뷰는 서로 "구독"하여 가입 한 "이벤트"에 대한 문자열 키를 제공합니다.
이벤트가 트리거되면 뷰 또는 모델은 해당 이벤트에 대해 수행 할 작업을 결정하는 모든 구독자에게 문자열을 보냅니다. 예를 들어 뷰 액션 리스너 메소드 중 하나에서 (이것은 지속 가능한 객체에 bicycleMakeField를 설정한다고 생각합니다.)
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
이 호출은 결국 Vehicle 모델에서이 메소드에 도달합니다.
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
교수는 이러한 방법으로 비즈니스 로직 객체에 대한 메소드를 호출하는 것보다 확장 가능하고 유지 관리가 가능하다고 말합니다. 그는 뷰와 모델이 서로의 존재를 알지 못하기 때문에 커플 링이 없다고 말합니다.
뷰와 모델이 작동하기 위해 동일한 문자열을 사용해야하기 때문에 이것이 더 나쁜 종류의 커플 링이라고 생각합니다. 뷰 또는 모델을 제거하거나 문자열에 오타를 작성하면 컴파일 오류가 발생하지 않습니다. 또한 필요한 것보다 코드를 훨씬 더 길게 만듭니다.
나는 이것과 그에 대해 논의하고 싶지만, 경험이없는 학생 인 내가 할 수있는 모든 주장에 반대하기 위해 그의 산업 경험을 사용합니다. 내가 놓친 그의 접근 방식에 이점이 있습니까?
명확히하기 위해 위의 접근법을 모델과 분명히 결합시키는 관점을 비교하고 싶습니다. 예를 들어, 차량 모델 객체를 뷰에 전달한 다음 차량의 "make"를 변경하려면 다음과 같이하십시오.
vehicle.make = bicycleMakeField.getText();
이것은 현재 차량 제조를 한 곳에서 하나의 판독 가능한 코드 줄로 설정하는 데 사용되는 15 줄의 코드를 줄입니다. (이러한 종류의 작업은 앱 전체에서 수백 번 수행되므로 가독성과 안전성 측면에서 큰 승리라고 생각합니다.)
최신 정보
팀 리더와 저는 정적 타이핑을 사용하여 원하는 방식으로 프레임 워크를 재구성하고 교수에게 정보를 제공하고 결국 데모를 제공했습니다. 그는 도움을 요청하지 않는 한 프레임 워크를 사용할 수있을만큼 충분히 관대하며 팀의 나머지 부분을 신속하게 유지할 수 있는지 여부는 공평합니다.