Repository navigation
Design Document
Lee Wonjoon edited this page Jun 8, 2016
·
47 revisions
#Gradle
- 1 맥북, 1 기가바이트, 2 서피스로 개발 환경의 차이가 심함
- 개발 환경을 최대한 맞추기 위해 jetbrain의 IntelliJ를 이용하고 Build tool로 gradle을 선택.
#LCS Algorithm
- 이 부분은 주지스님이 작성해주세요.
#MVC ##MVC?
- 현 프로젝트는 MVC 패턴을 적용시키기에는 적합하지 않다고 판단.
- Model이 매우 작음. 실질적으로 View, Controller 부분에서 대부분 처리가 가능함.
##Our MVC ###Model
- Block
- 본 프로젝트에서 지정하는 한 문장의 단위.
- compare 작동이 이 Block 객체 단위로 이루어짐.
- Diff
- 실질적으로 두 text가 어떻게 다른지 체크해주는 클래스.
- LCS
- FileHelper
- Pair
###View
- 본 프로젝트에서는 fxml 부분이 모두 View를 나타내고 있다.
- main.fxml
- GUI 전체의 fxml.
- edit_panel.fxml
- text를 띄워주는 textArea 부분을 컴포넌트로 분리 함.
###Controller
- EditPanel
- View 부분의 EventHandler 구현
- Controller
- FileSelector
- FileChooser를 이용한 load, save 함수 분리
- EditPanelEvent
#SOLID ##단일 책임 원칙(SRP)
- 한 클래스는 하나의 책임만 가져야 한다.
##개방-폐쇄 원칙(OCP)
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야 한다.
- Pair
- Generic으로 구현된 Pair는 모듈의 기능 확장이나 변경을 다른 클래스와 무관하게 진행 할 수 있다.
##리스코프 치환 원칙(LSP)
- 프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스를 바꿀 수 있어야 한다.
- Diff
- Diff는 보이는 바와 같이 Algorithm을 구현하고 있다. 이 Algorithm 부분은 Algorithm을 implement 중인 LCS로 교체 하여도 프로그램의 정확성이 유지된다.
##인터페이스 분리 원칙(ISP)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- 저장 및 불러오기 부분의 함수를 맡는 EditPanelEventListener와 FileChooser을 이용하는 함수를 맡는 FileSelector를 분리.
##의존관계 역전 원칙(DIP)
- 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.
-
- UML 사진을 올려 상속을 받지 않고 추상화에 의존했음을 보인다