2015-05-07 2 views
1

У меня есть метод службы WCF, который принимает параметр int и возвращает набор результатов на основе этого параметра. Я использую linq и сущность framework для извлечения записей. Существует новое требование для запроса одной и той же таблицы с другим полем. Это поле является полем varchar и принимает входной параметр string. Итак, каков наилучший способ реализации этого. Лучше ли распространять один и тот же метод обслуживания для включения нового параметра или сделать отдельный метод обслуживания. Другой момент, который следует отметить, заключается в том, что я не делаю, какой параметр будет передавать клиент в любой момент времени. Ниже приведена существующая логика метода обслуживанияWCF - параметры передачи

public IEnumerable<TBI.JV.Business.Objects.Asset> GetAssetsBasicBySedols(int[] sedols) 
     { 
      var priceDate = DateTime.UtcNow.Date.AddMonths(-8); 
      var typeList = new string[] 
       { 
        "UNIT TRUST", 
        "OEIC", 
        "INVESTMENT TRUST", 
        "INVESTMENT COMPANY", 
        "PENSION FUND", 
        "INSURANCE BOND", 
        "LISTED EQUITY", 
        "PREFERENCE SHARE", 
        "ZERO DIVIDEND PREF", 
        "GILT (CONVENTIONAL)", 
        "GILT (INDEX LINKED)", 
        "AIM", 
        "VCT", 
        "OFFSHORE FUND", 
        "ETP" 
       }; 
      using (var dealingContext = new dbDealingContainer()) 
      { 
       return (from fundprice in dealingContext.FundPrices 
         where (fundprice.FUND_STATUS == "ACTIVE" || fundprice.FUND_STATUS == "SUSPENDED") && 
           (fundprice.INVNAME != null || fundprice.INVNAME != "") && 
           !fundprice.INVNAME.StartsWith("IFSL Bestinvest") && 
           fundprice.WaterlooTradable == true && 
          //fundprice.PRICE_DATE > priceDate && 
           fundprice.BID_MID_PRICE > 0 && typeList.Contains(fundprice.FUND_TYPE) 
           && ((sedols.Count() > 0 && sedols.Contains(fundprice.Id)) || sedols.Count() == 0) 
         select new TBI.JV.Business.Objects.Asset 
         { 
          AssetName = fundprice.INVNAME, 
          AssetId = fundprice.Id, 
          AssetType = fundprice.FUND_TYPE, 
          Epic = fundprice.INVESTMENT_CODENAME, 
          StarRating = fundprice.STARLEN, 
          Sedol = fundprice.SEDOL_NUMBER 
         }).ToList(); 
      } 
     } 
+0

Является ли новое требование для _query той же таблицы с ** другим полем ** _ (запрос целым числом и строкой) или просто параметром строки? – Herdo

ответ

3

Короче говоря, вам необходимо добавить метод сервиса с этим новым параметром.

В SО е р в riented rchitecture, изменение (и, следовательно, удаление) рассматривается как критическое изменение при добавлении является прозрачным для клиентов.

При изменении вашей службы вы должны спросить себя, что произойдет с фактическими клиентами, использующими ваше приложение. Если ответ «им придется обновлять своих клиентов», это, как правило, не очень хорошо.

В другой точке зрения новые функциональные возможности означают новые концепции и не должны изменять существующие концепции.

Кроме того, даже если вы планируете заменить существующую функциональность, вы не должны делать это за один шаг. Вы должны подумать о совместимости по совместимости: отправьте сервис с новыми измененными функциями, отметьте старый как устаревший, сообщите своим клиентам и отправьте сервис в его окончательной версии позже.

Вся эта концепция называется SOA Governance.

Смежные вопросы