현재 Excel 파일에서 측정 된 데이터를 읽고 개체에 구문 분석하고 데이터베이스에 삽입 할 수있는 가능성을 제공하는 C# 프로그램을 작성 중입니다.이 btw에 대해 NHibernate를 사용하고 있습니다.C#에서 제네릭을 사용하여 다형성 실현
프로그램에는 GUI 구현이 있습니다. 다양한 형태의 측정 데이터가 있습니다. (예 : 모터의 데이터 또는 스위치 보드의 데이터). 사실, 측정 데이터가 무엇이든 관계없이 하나의 Form 클래스 (GUI 창)를 정의하고자합니다.
두 개의 파서 인 MotorParser 및 SwitchboardParser는 모두 이라는 메서드를 가지고 있습니다. IList ParseDataTableToList (DataTable dataTable, DBConnectionWrapper dBCon) 여기서 T는 Motor 개체 또는 Switchboard 개체입니다. 그래서, 내 생각은이 두 클래스에 의해 구현 될 것이다 제네릭과의 인터페이스를 만드는 것이 었습니다 : 한편
public interface IParser<T>
{
IList<T> ParseDataTableToList(DataTable dataTable, DBConnectionWrapper dBCon);
}
, 내가하는 방법 무효 InsertOrUpdate (T 목록)를 구현 데이터베이스 저장소를 가지고 수행을, 여기에서 T는 다시 Motor 또는 Switchboard 개체입니다. 나는이에 대한 인터페이스를 구현 한 :
public interface IInsertOrUpdateList<T>
{
void InsertOrUpdate(IList<T> list);
}
좋아을, 아이디어는 이제 특정 IInsertOrUpdateList 개체 (MotorRepository 또는 SwitchboardRepository)와 IParser (MotorParser 또는 SwitchboardParser) 모두를 전달하는 것입니다. 앞에서 언급 한 Form 클래스 (ImportView)는 해당 인터페이스에서만 작동해야합니다. 문제는 제네릭으로 작업 할 때 이것이 가능한지 또는 어떻게 가능할 지 모르겠다는 것입니다. 나는이 창을 인스턴스화 할 때
public partial class ImportView : Form
{
private IParser parser;
private IInsertOrUpdateList repository;
private dataToParse;
public ImportView(DataTable dataToParse, IParser parser, IInsertOrUpdateList repository)
{
this.parser = parser;
this.repository = repository;
this.dataToParse = dataToParse;
}
public void ParseAndInsertIntoDB()
{
repository.InsertOrUpdateList(parser.ParseDataTableToList(dataToParse, null));
}
}
, 나는이 모터 또는 배전반 객체에 대한 데이터를 측정 여부를 결정 개체를 제공 할 것이다 :
이 내가 마음에 구현했다 방법의 잘못된 구문은
ImportView = new ImportView(dataToParse, new MotorParser(), new MotorRepository());
또는
ImportView = new ImportView(dataToParse, new SwitchboardParser(), new SwitchboardRepository());
는 방법이 어떻게 제네릭 문제를 깨달을 수 있습니까? 나는 모든 종류의 아이디어에 열려 있습니다.
이미 가지고있는 것에는 무엇이 문제가 있습니까? 나에게 그것을 할 수있는 좋은 방법처럼 보입니다. Factory 패턴을 사용하여'ImportView'를 생성하십시오. – Belogix
구문을 수정하려면'ImportView' 클래스를 generic으로 만들어야합니다 :'ImportView '그리고'IParser'과'IInsertOrUpdateList '타입을 사용하십시오. 비록 그것이 컴파일을하기에 충분하다면 ... –