gpt4 book ai didi

c# - 如何组织自定义 SQl 查询集合

转载 作者:太空宇宙 更新时间:2023-11-03 21:53:01 26 4
gpt4 key购买 nike

我正在使用 SQlite 为 Windows Phone 开发一个应用程序,并且有很多自定义 SQL 查询。喜欢

string query = "SELECT distinct(destinations.name) as Destinations 
FROM destinations, flights
WHERE destinations.d_ID = flights.d_ID
AND flights.Date = #" + date.ToShortDateString() + "#";

然后运行:

 var result = (Application.Current as App).db.Query(query);

为了使用 SQlite,我使用了 http://dotnetslackers.com/articles/silverlight/Windows-Phone-7-Native-Database-Programming-via-Sqlite-Client-for-Windows-Phone.aspx#s2-introduction-to-sqlite-client-for-windows-phone和他们的 DBHelper

我希望所有查询都在一个地方,这样我就可以快速更改它们。

想问一下如何正确操作?

  • 创建一个静态类
  • 使用查询集合创建枚举或字典
  • 使用集合创建一些 XML 或类似文件 -

多谢指教

最佳答案

我认为任何方法都无效,原因如下:

创建一个静态类

这是一个 God object并被视为 anti-pattern ,最好远离它。维护这将是一场噩梦。

使用查询集合创建枚举或字典

现在您拥有的不是 God 对象,而是 God 集合,实际上只是以不同的方式实现相同的反模式。

此外,您将拥有字符串键(或枚举键),并且两者之间没有很强的联系(如果字典由于某种原因没有填充怎么办?)。

使用集合创建一些 XML 或类似文件

有人可能会争辩说,您正在做与字典相同的事情;您必须以某种方式 键入查询,然后进行查找。这是一种非常脆弱的方法。

可能的解决方案

我建议您首先将数据层抽象为逻辑单元。为相关的数据操作创建一个类。

例如,如果您有一些与目的地相关的查询和操作,请创建一个公开这些操作的接口(interface):

public interface IDestinationDataOperations
{
// Get destinations by date.
IEnumerable<string> GetDestinationsByDate(DateTime asOf);
}

然后,创建一个实现此特定于 SQL Lite 的类。在您想进行调用的地方,变量是interface 类型。

这样做的好处是:

  • 如果您将实现从 SQL Lite 更改为其他一些底层数据存储(网络服务调用、JSON REST 调用等),您只需更改填充接口(interface)变量的位置(这是 dependency injection 开始的位置)有用),因为您的所有调用都反对抽象

  • 接口(interface)更容易测试:

    • 您可以根据需要的任何测试数据测试直接实现
    • 对于依赖于界面的项目,您可以按照自己喜欢的方式模拟界面,而不需要实际底层数据库进行测试。

然后,对于其他数据操作,您可以清洗、漂洗和重复。

对于奖励积分,你可以把界面分离出来变成一个unit-of-work用于写入和 repository用于读取,具体取决于什么最适合您的需求。

关于c# - 如何组织自定义 SQl 查询集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13609855/

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