回答

收藏

它是一个好的设计吗?

技术问答 技术问答 232 人阅读 | 0 人回复 | 2023-09-12

我想知道你对我们程序这部分的想法已经实现了:
/ P/ M- T/ q5 |: r# c& B- {在我们的数据库中有一个露营地清单。
: w' a4 p) `" b+ ?" ^合作伙伴打电话给我们,把所有的露营带到我们身边GPS所有提供酒吧的露营地(我们称之为服务)都在附近或提供给我们。
" J2 `5 }" N% K$ u那我是怎么意识到的呢?
1 A& [* [3 j, M0 {3 _' e' a这是我们的数据库:0 X7 Q* s8 @2 m. y) u
Campsite- ID- NAME- GPS_latitude- GPS_longitudeCampsiteServices-Campsite_ID-Services_ID所以我的代码(c#,但不相关,可以说是面向对象的语言)看起来像这样* a& L, X; k5 R# Z
public class SqlCodeCampsiteFilter{  public string SqlCode;  public Dictionary Parameters;}interface ISQLCampsiteFilter{   SqlCodeEngineCore CreateSQLCode();}public class GpsLocationFilter : ISQLCampsiteFilter{  public float? GpsLatitude;  public float? GpsLongitude;   public SqlCodeEngineCore CreateSQLCode()          {       --return an sql code to filter on the gps location like dbo.getDistance(@gpsLat,@gpsLong,campsite.GPS_latitude,campsite.GPS_longitude) with the parameters  }}public class ServiceFilter : : ISQLCampsiteFilter{  public int[] RequiredServicesID;   public SqlCodeEngineCore CreateSQLCode()          {       --return an sql code to filter on the services "where ID IN (select CampsiteServices.Service_ID FROm CampsiteServices WHERE Service_ID in ...)  }}所以在我的webservice代码中:* x6 o  o" l- [) [  l, g+ ]# F% z8 x
List[I] filters = new List[I]();if(gps_latitude.hasvalue && gps_longitude.hasvalue){  filters.Add (new GpsLocationFilter (gps_latitude.value,gps_longitude.value));}if(required_services_id != null){  filters.Add (new ServiceFilter (required_services_id ));}string sql = "SELECT ID,NAME FROM campsite where 1=1"foreach(ISQLFilterEngineCore aFilter in filters){  SqlCodeCampsiteFilter code = aFilter.CreateSQLCode();  sql  = code.SqlCode;  mySqlCommand.AddParameters(code.Parameters);//add all the parameters to the sql command}return mySqlCommand.GetResults();1)我不使用ORM原因很简单,因为这个系统已经存在了10年,唯一一个从一开始就在这里的开发人员就开始了解公私的区别。; X0 v5 B0 X7 U
2)我不喜欢SP因为:我们可以重写,t-sql使用不那么有趣$ C( @& m: o8 a( l
那你怎么看 ?清楚吗 ?你有什么图案值得一看吗?7 \, C: _: w) r- F) ^, B
若不清楚,请询问2 j2 Z8 s" ?# \* Y
                                                                7 a' [0 K& y- }
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则