클린코드
카테고리 미분류
지은이 로버트 C. 마틴 (케이앤피IT, 2010년)
상세보기


public class SetupTeardownIncluder {

	private PageData pageData;
	private boolean isSuite;
	private WikiPage testPage;
	private StringBuffer	newPageContent;
	private PageCrawler pageCrawler;
	
	public static String render(PageData pageData) throws Exception {
		return render(pageData, false);
	}
	
	public static String render(PageData pageData, boolean isSuite) throws Exception {
		return new SetupTeardownIncluder(pageData).render(isSuite);
	}
	
	private SetupTeardownIncluder(PageData pageData) {
		this.pageData = pageData;
		testPage = pageData.getWikiPage();
		pageCrawler = testPage.getPageCrawler();
		newPageContent = new StringBuffer();
	}
	
	private String render(boolean isSuite) throws Exception {
		this.isSuite = isSuite;
		if (isTestPage())
			includeSetupAndTeardownPages();
		return pageData.getHtml();
	}
	
	private boolean isTestPage() throws Exception {
		return pageData.hasAttribute("Test");
	}
	
	private void includeSetupAndTeardownPages() throws Exception {
		includeSetupPages();
		includePageContent();
		includeTeardownPages();
		updatePageContent();
	}
	
	private void includeSuiteSetupPage() throws Exception {
		include(SuiteResponder.SUITE_SETUP_NAME, "-setup");		
	}
	
	private void includeSetupPage() throws Exception {
		include("Setup", "-setup");		
	}
	
	private void includePageContent() throws Exception {
		newPageContent.append(pageData.getContent());
	}
	
	private void includeTeardownPages() throws Excepton {
		includeTeardownPage();
		if (isSuite)
			includeSuiteTeardownPage();
	}
	
	private void includeTeardownPage() throws Exception {
		include("TearDown", "-teardown");
	}
	
	private void includeSuiteTeardownPage() throws Exception {
		include(SuiteResponder.SUITE_TEARDOWN_NAME, "-teardown");
	}
	
	private void updatePageContent() throws Exception {
		pageData.setContent(newPageContent.toString());
	}
	
	private void include(String pageName, String arg) throws Exception {
		WikiPage inheritedPage = findInheritedPage(pageName);
		if ( inheritedPage != null ) {
			String pagePathName = getPathNameForPage(inheritedPage);
			buildIncludeDirective(pagePathName, arg);
		}
	}
	
	private WikiPage findInheritedPage(String pageName) throws Exception {
		return PageCrawlerImpl.getInheritedPage(pageName, testPage);
	}
	
	private String getPathNameForPage(WikiPage page) throws Exception {
		WikiPagePath pagePath = pageCrawler.getFullPath(page);
		return PathParser.render(pagePath);
	}
	
	private void buildIncludeDirective(String pagePathName, String arg) {
		newPageContent
			.append("\n!include ")
			.append(arg)
			.append(" .")
			.append(pagePathName)
			.append("\n");
	}
}

프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다.

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접제어한다.

단지 동작하는 중에 필요한 기능이 이쓸 때 능동적으로 라이브러리를 사용할 뿐이다.

 

반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.

보통 프레임워크가 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션코드를 사용하도록 만드는 방식이다.

프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 한다. 애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 한다. 

 

--> 라이브러리를 사용하는 애플리케이션 : 애플리케이션이 필요할 때 라이브러리를 사용

--> 프레임워크를 사용하는 애플리케이션 : 프레임워크가 흐름을 주도하다가 필요한 애플리케이션을 사용

 

출처 : 토비의 스프링3, 1장_오브젝트와 의존관계

토비의스프링3
카테고리 컴퓨터/IT > 프로그래밍/언어 > 프로그래밍일반
지은이 이일민 (에이콘출판, 2010년)
상세보기


이 글은 스프링노트에서 작성되었습니다.

오늘 불현듯 '나를 위해서, 다른 이들을 위해서' 할 수 있는 것이 뭘까 고민해봤다.

OpenSource Project를 진행해보자.

내가 유용하게 사용하여 왔던 것들에 대한 보답을 할 때가 된 것 같다.

흠... 그런데 뭘 하면 좋을까??

'Programming' 카테고리의 다른 글

내가 짰던 코드를 회상하며,  (0) 2011.03.09
에디터에 대해서  (0) 2011.03.09
Types of software architects  (0) 2011.01.01
What dows 'PMD' mean?  (0) 2010.12.31
[Velocity] velocity.properties  (0) 2010.03.13
출처 : http://en.wikipedia.org/wiki/Software_architect

Types of software architects

The enterprise architect handles business-related software decisions that frequently can involve multiple software systems within an organization, spanning several projects teams, and often at more than one site. The Enterprise Architect may seldom see or interact with source code.

An application architect works with a single software application. This may be a full- or a part-time role. The application architect is almost always an active software developer.

Other similar titles in use, but without consensus on their exact meaning, include:

The table below indicates many of the differences between various kinds of software architects:

Architect TypeStrategic ThinkingSystem InteractionsCommunicationDesign
Enterprise Architect Across Projects Highly Abstracted Across Organization Minimal, High Level
Solutions Architect Focused on solution Very Detailed Multiple Teams Detailed
Application Architect Component re-use, maintainability Centered on single Application Single Project Very Detailed

In the software industry, as the table above suggests, the various versions of architect do not always have the same goals.[1]



Architect(아키텍트)에도 여러종류가 있구나. 나에게 어울리는 타입은 뭘까?
중간적인 위치라고 볼 수 있는 Solution Architect가 어울리는 것 같다.
목표는 Enterprise Architect로 해야겠다.

'Programming' 카테고리의 다른 글

에디터에 대해서  (0) 2011.03.09
OpenSource Project 를 할만한 게 뭐가 있을까?  (0) 2011.01.28
What dows 'PMD' mean?  (0) 2010.12.31
[Velocity] velocity.properties  (0) 2010.03.13
Velocity 설정법  (0) 2010.02.21
OS : Ubuntu
Language : Java

Ubuntu 환경에서 SVN을 설치하고 이클립스에 Subclipse를 설치한 후에 SVN을 연동하려고 하는데
[JavaHL] 관련 문제가 발생한다.

NOTE: as per the error message I am using Sun Java on my system.

해결방법 : 

Install libsvn-java

The Debian/Ubuntu package libsvn-java has the libsvnjavahl-1.so file that is required by JavaHL subversion interface. Install libsvn-java by typing the following into a command line:

sudo  apt-get install libsvn-java


svn 관련 library를 설치하고 나니 정상적으로 실행된다.

+ Recent posts