我正在實現在我的C#應用程序中使用商業邏輯。 我無法將邏輯合理化爲一段合理的代碼。 執行的邏輯是這樣的:如何在實現業務邏輯時避免使用數字或枚舉
有一個元素樹,讓我們說:項目,國家,地區,城市。一個項目包含國家。國家包含地區,包含城市和城市的地區包含數據條目。我們將根據可用信息填充具有數據條目的元素。
- 如果國家,地區和市資料齊全,數據推到項目和使用信息,以知道在哪裏插入數據項。
- 如果國家信息不可用,創建一個新的國家和使用地區和市信息插入數據項。
- 如果只是城市的信息是可用的,創建一個新的地區新國家內使用市信息把數據存在。
- 如果沒有信息可用,創建一個新的市新地區內新國家內,並把那裏的數據。
- 如果任何信息,不提供出的順序(例如國家和地區也有,但不是市),我們必須退回到更一般的情況下(創建新國家,地區在這種情況下城市)。
此外:
- 當你創建一個類的葉子,你必須提供在構造父。
- 查詢哪些信息可用是昂貴的。
- 我想避免重複創建新類的代碼。
- 我無法更改類
Country
,Region
,City
的實施。
我的解決方案在下面的工作,但它的醜陋和使用整數來控制應用程序流量讓我不寒而慄。
如何改進下面的代碼片段?
Country country = null;
Region region = null;
City city = null;
int level;
if (!IsCityInfoAvailable())
{
// we have to make a new country, region and city
level = 3;
}
else if (!IsRegionInfoAvailable())
{
// we have to make a new country and region
level = 2;
}
else if (!IsCountryRegionAvailable())
{
// we have to make a new country
level = 1;
}
else
{
// we have all the info we need
level = 0;
}
IDataEntryTarget target;
if (level > 0)
{
country = new Country(Project, "Unnamed Country");
target = country;
}
if (level > 1)
{
region = new Region(country, "Unnamed Region", Region.DefaultRegionSettings);
target = region;
}
if (level > 2)
{
city = new City(region, "Unnamed City", 0);
target = city;
}
// ... proceed with data entry code using `target`...
對不起,在這裏應該做的級別整數是多少? – Sinaesthetic 2012-04-21 19:27:00
哦,我明白了,它只是確定可用信息的最高級別? – Sinaesthetic 2012-04-21 19:30:25
未來,我會建議您在課堂結構中使用作文。城市應該是地區的一個屬性,地區是國家的一個屬性,國家是項目的一個屬性。這樣,你可以通過將它們全部加載到列表中並使用頂級類中定義的行爲(Project;即:var population = ProjectList.Where(i => i.Country ==「Uraguay」)來控制它們, ).Country.Region.City.Population;或ProjectList.Where(i => i.Country ==「USA」)。AddPhoto(img); – Sinaesthetic 2012-04-21 19:42:14