我正在努力在我的 C# 应用程序中实现业务逻辑。我无法将逻辑拟合到一段理智的代码中。实现的逻辑是这样的:
有一棵元素树,比如说:项目、国家、地区、城市。单个项目包含国家。国家包含地区,地区包含城市,城市包含数据条目。我们将根据可用信息使用数据条目填充元素。
- 如果Country、Region和City信息可用,则将数据推送到项目并使用该信息知道在哪里插入数据条目。
- 如果国家信息不可用,则创建一个新国家并使用地区和城市信息插入数据条目。
- 如果只有城市信息可用,请在新国家/地区内创建一个新区域并使用城市信息将数据放在那里。
- 如果没有可用信息,请在新国家/地区内的新区域内创建新城市并将数据放在那里。
- 如果任何信息不可用(例如Country和Region可用但City不可用),我们必须回退到更一般的情况(在这种情况下创建新的Country、Region和City)。
此外:
- 创建叶类时,必须在构造函数中提供父类。
- 查询可用的信息是昂贵的。
- 我想避免重复创建新类的代码。
- 我不能改变类的实现
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`...