.net 表示数据库中的嵌套类?
我有一些嵌套类,它们当前存储在平面文件中.net 表示数据库中的嵌套类?,.net,database,architecture,nosql,.net,Database,Architecture,Nosql,我有一些嵌套类,它们当前存储在平面文件中 public List<Factory> Factories public class Factory { public int Id public string Name public List<Line> Lines } public class Line { public int Id public string Name public List<Machine>
public List<Factory> Factories
public class Factory
{
public int Id
public string Name
public List<Line> Lines
}
public class Line
{
public int Id
public string Name
public List<Machine> Machines
}
public class Machine
{
public int Id
public string Name
}
公共列表工厂
公营工厂
{
公共整数Id
公共字符串名
公共列表行
}
公共班级线
{
公共整数Id
公共字符串名
公共列表机器
}
公共类机器
{
公共整数Id
公共字符串名
}
使用当前的结构,很容易执行以下操作
有人能给我提供一些关于架构和设计模式的建议吗?我现在有点不知所措?谢谢。如果你正确地完成了这项任务,就不会那么困难了 在这种情况下,关键是将显示/操作树的关注点与存储/检索数据的关注点分开 目前,您正在读取平面文件并构建树。您的网格代码已经知道如何处理树并相应地更新平面文件。我假设您希望保留相同的网格结构和功能 唯一的新部分是从数据库中保存/检索相同的数据,并创建与平面文件相同的树 步骤1)是使用抽象方法(如loadGrid()和saveGrid()以及搜索所需的任何其他方法)定义数据类 步骤2)是为FlatFile定义一个子类,为DBFile定义一个子类,在每一个子类中,您都需要为loadGrid()、saveGrid()等提供存根实现 步骤3)是完成loadGrid()、saveGrid()的平面文件实现,然后测试网格是否正常工作。例如,FlatFile::loadGrid()将读取平面文件并填充树。FlatFile::saveGrid()将更新的树保存为平面文件
public List<Factory> Factories
public class Factory
{
public int Id
public string Name
public List<Line> Lines
}
public class Line
{
public int Id
public string Name
public List<Machine> Machines
}
public class Machine
{
public int Id
public string Name
}
现在,您的主网格代码不再“关心”如何检索或存储数据,这是一个很好的位置
步骤4)是完成loadGrid()、SaveGrid()的DBFile实现,然后测试网格是否正常工作
<>但是在你这样做之前,你需要考虑你想要什么样的数据库,并且有几种选择。
最终的选择取决于几个因素,但一个主要因素是数据的结构。正如您所描述的,工厂和生产线之间以及生产线和机器之间存在着1:许多关系。任何rdbms(如mySQL或SQLServer)都非常适合这样做。但在您的情况下,NoSQL解决方案似乎也能很好地工作,使用“嵌入式文档”来实现1:many关系。下面是一个使用MongoDB的示例
现在继续并完成loadGrid()、SaveGrid()的DBFile实现,然后测试网格是否仍然正常工作。在这种情况下,DBFile::loadGrid()将从数据库读取数据并填充树。DBFile::saveGrid()将更新的树保存到数据库中
注意:通过定义这个loadGrid()/SaveGrid()类型的接口,您可以继续添加新方法,并以您喜欢的多种方式保存/检索数据,而无需更改网格代码。您所要做的就是实现loadGrid()、saveGrid(),它们捕获每个特定情况所需的代码
我希望这会有所帮助,但可以根据需要寻求澄清。我觉得像loadGrid()这样的方法存在的问题是,数据会以静态方式传递到网格,只有在调用saveGrid()时才会再次保存,这会一次保存所有数据。我正试图找到一种方法,以更细粒度的方式在网格和数据之间工作,这样当用户进行更改时,数据库会立即更新,允许其他用户查看更改而无需hav