큰 알고리즘에서 동일한 알고리즘을 따르는 많은 메소드가 있으며, 많은 코드 중복을 제거하는 일반적인 메소드를 호출 할 수 있기를 바랍니다.많은 양의 코드가 중복되는 문제
내가 아래에있는 것과 같은 방법의 톤을 가지고, 나는 최적의 단지 Save<SQLiteLocation>(itemToSave);
를 호출 할 수 있도록하려는 것입니다하지만 난 이후 문제의 큰 거래를하는 방법 SQLiteConnection.Find<T>
T 같은 추상 데이터 유형을 수락하지 않습니다 제네릭에서.
이 문제를 해결받을 수있는 방법은 내가 그것을 내가 코드의 많은 150 라인을 절약 할 수 고칠 수 있다면
여기내 코드입니다, 거기 :
public bool SaveLocation(ILocation location, ref int primaryKey)
{
var dbConn = new SQLiteConnection (dbPath);
SQLiteLocation itemToSave = new SQLiteLocation();
itemToSave.LocationName = location.LocationName;
itemToSave.Latitude = location.Latitude;
itemToSave.Longitude = location.Longitude;
itemToSave.PrimaryKey = location.PrimaryKey;
----------------------------------------------------------------------------------------
SQLiteLocation storedLocation = dbConn.Find<SQLiteLocation>
(x => x.PrimaryKey == location.PrimaryKey);
if (storedLocation != null)
{
dbConn.Update(itemToSave);
return true;
}
else if (storedLocation == null)
{
dbConn.Insert(itemToSave);
primaryKey = itemToSave.PrimaryKey;
return true;
}
return false;
}
그리고 여기 또 다른 방법은 방법 참조 참고 : 내 점선 아래 두 가지 방법의 코드는 기본적으로
public bool SaveInvitation(IInvitation invitation, ref int primaryKey)
{
var dbConn = new SQLiteConnection(dbPath);
SQLiteInvitation itemToSave = new SQLiteInvitation();
itemToSave.GroupName = invitation.GroupName;
itemToSave.InviterName = invitation.InviterName;
itemToSave.ParseID = invitation.ParseID;
itemToSave.GroupParseID = invitation.GroupParseID;
itemToSave.PrimaryKey = invitation.PrimaryKey;
---------------------------------------------------------------------------------------
SQLiteInvitation storedInvitation = dbConn.Find<SQLiteInvitation>
(x => x.PrimaryKey == invitation.PrimaryKey);
if (storedInvitation != null)
{
dbConn.Update(itemToSave);
return true;
}
else if (storedInvitation == null)
{
dbConn.Insert(itemToSave);
primaryKey = itemToSave.PrimaryKey;
return true;
}
return false;
}
당신은 AutoMapper 또는 뭔가를 사용할 수 있다고 생각하는 것이 바로 그대로 보는 T에 또 다른 제약 조건을 추가했다. 또한 메소드에서'itemToSave'를 옮겨서 매개 변수로 전달하면 나머지 코드를 일반적인 것으로 만들 수 있다고 생각합니다. –
'Find'문장을 만들기 위해 표현식 트리를 살펴 보셨습니까? –
'storedX'는'null'이거나'else'를 사용할 필요가 없습니다. 이로 인해 false를 반환하지 않으므로 반환 값을 제거 할 수 있습니다. 왼쪽은'if (storedX! = null) {dbConn.Update (itemToSave); } else {dbConn.Insert (itemToSave); primaryKey = itemToSave.PrimaryKey; }'. 거기에 3 줄이 바로 제거되었습니다. – Default