2009-06-17 2 views
0

죄송합니다. 제목이 잘못되었으므로 단어를 올바르게 입력하는 법을 알지 못했습니다.이 방법에 대한 팩토리가 있습니까? 유형 또는 공장에서의 정적 메소드?

Table tab = Table.OpenTable("SomePath"); 
Table tab = Table.CreateNew("DummyTableName"); 
: 나는 모든 방법이 유형에 정적 곳, 같은 것을 사용하고있는 현재 시점에서

//Creates a new table in underlying provider and returns new Table object. 
CreateNew(string Name); 
//Opens the table in provider and returns new Table object. 
OpenTable(string Path); 
//Same action as above just on a collection, and returns a IList<Table> 
OpenTables(IList<string> path); 

:

내가 클래스라는 테이블과이 세 가지 방법을 말해봐

아이디어를 얻었습니다.

그러나 실제로 공장에 있어야하는지 궁금합니다. 이런 식으로 뭔가 : 그 당신은 어떻게 생각하십니까 하드 공장이

을 테스트하기 위해 사용하는 다른 코드를 만들 것 같은 공장은 정적되지 않을 것

TableFactory factory = new TableFactory(); 
Table tab = factory.CreateNew("DummyTableName"); 
Table tab = factory.OpenTable("SomePath"); 

?

답변

1

달성하려는 목표에 따라 다릅니다. 팩토리를 사용하면 제어 반전이 좋아 지므로 테스트하는 동안 사용하는 Table에 대한 Test 구현을 생성 할 수 있으므로 유닛 테스트에 대한 세분화 된 제어가 가능합니다.

테스트 모드에서 사용할 수있는 공장 사용량은 TestTable 팩토리로 대체하십시오.

1

팩토리를 사용하는 주된 이유는 객체의 사용을 분리하는 것입니다. 다른 매개 변수를 사용하여 Table 개체를 만들었으므로 Table 클래스 자체의 정적 생성 방법을 사용하는 것이 더 합리적이라고 생각합니다.

0

은 당신이 생각나요 : 당신은 당신을 줄 수있는 공장과 모든 디커플링을 원하는 경우

var tab = new Table("tableName"); 

var tablePath = new TablePath("SomeTablePath"); 
var tab = new Table(tablePath); 

OTOH는, 나는 테이블 인터페이스를 추출하고이있을 것이다 factory는 인터페이스를 반환합니다.

+0

테이블을 열면 기본 공급자가 호출되어야하므로 생성자를 사용하는 경우 "생성자 규칙 없음"위반이 발생합니다. –