gpt4 book ai didi

oop - “静态/恒定”业务对象

转载 作者:行者123 更新时间:2023-12-04 18:16:15 28 4
gpt4 key购买 nike

我不太知道如何问这个问题,因此我将其作为示例:

想象在一个应用程序中您有一个Country对象。此对象有两个属性:Name和'Bordering Countries'集合。稍后可能会添加更多属性,但这将是很少更改的信息(例如,国家/地区/边界的更改)

可以说这个应用程序需要了解世界上所有国家。 您将在哪里存储这些对象的状态?您将如何更新它们? 将所有这些状态存储在数据库中似乎很愚蠢,因为它不会经常更改。

一种选择可能是拥有抽象的“国家”基础对象,并为每个国家/地区提供一个类,从该类继承每个国家/地区的详细信息。但这对我来说似乎不太正确。

处理此类对象的正确方法是什么?

更新:

有人询问语言:C#

另外,我是从Web应用程序的角度出发的,因此不会有多个客户端安装需要担心更新硬编码值的问题。

大多数人建议不要对数据进行硬编码,而应使用DB或XML文件存储数据。 谁能提供一个示例说明如何“更新”这种对象(例如从XML文件)?您会使用某种帮助程序或工厂方法来获取特定国家/地区的实例吗?

最佳答案

您有各种各样的答案,所以我想我要加上0.02美元。

就我个人而言,我总是对这样的固定列表进行硬编码(与邮政编码相同)。话虽如此,当我在您的位置时,我将始终针对可读性进行优化。即,如果您忘记了该项目并需要进行一些维护,那么在6个月的时间内有什么意义?

如果必须使用数据库:

public class Country
{
public string Name { get; set; }
public Country[] BorderingCountries { get; set; }

public Country(iDB db, string name)
{
BorderingCountries = db.BorderingCountriesGet(name);
}
}

您的单元测试:
public UnitTest1()
{
iDB db = new DB();
Country c = new Country(db, "Spain");
Assert.AreEqual(2, c.BorderingCountries.Count());
Assert.AreEqual(1, c.BorderingCountries.Count(b => b.Name == "France"));
Assert.AreEqual(1, c.BorderingCountries.Count(b => b.Name == "Portugal"));
}

糟糕!您可能想填充整个列表(一次不要一个!)
D B:
static void Main(string[] args)
{
Countries countries = new Countries(new DB());
}

public class Countries
{
public List<Country> Items { get; set; }
public Countries(iDB db)
{
tblCountry[] countries = db.BorderingCountries();
Items = new List<Country>();
Country country = null;
foreach (var c in countries)
{
if (country == null || country.Name != c.Name)
{
country = new Country(c.Name);
Items.Add(country);
}
country.BorderingCountries.Add(new Country(c.BorderingCountry));
}
}
}


public class Country
{
public string Name { get; set; }
public List<Country> BorderingCountries { get; set; }
public Country(string name)
{
this.Name = name;
BorderingCountries = new List<Country>();
}
}

public interface iDB
{
tblCountry[] BorderingCountries();
}

public class DB : iDB
{
public tblCountry[] BorderingCountries()
{
using (DataClassesDataContext dc = new DataClassesDataContext())
{
return dc.tblCountries.ToArray();
}
}

}

如果我要对其进行硬编码:
public class Countries
{
public List<Country> Items { get; set; }
public Countries()
{
Items = new List<Country>();
Items.Add(new Country { Name = "Spain", BorderingCountries = new string[] { "France", "Portugal" }});
Items.Add(new Country { Name = "France", BorderingCountries = new string[] {"Spain","Belgium"});
}
}

关于oop - “静态/恒定”业务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2903119/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com