Создать сервис для вызова Дао из кода позади - PullRequest
0 голосов
/ 17 января 2019

Мое приложение ASP.NET не содержит никакого бизнес-уровня, мы используем "ActionProcessor.ProcessActionAndResponse", чтобы затем вызвать Dao, как в другом файле, вызывать Action.cs (пример):

public class AdvertiserGroupLoadPartnerAction : BaseAction
{
    private AdelContext _context = null;
    private long _partnerId = ValueTypeUtils.Instance.LongNull;

    #region CONSTRUCTORS
    // ----------------------------------------------------------
    // Members
    // ----------------------------------------------------------

    public AdvertiserGroupLoadPartnerAction(AdelContext context, long partnerId)
    {
        _context = context;
        _partnerId = partnerId;
    }
    #endregion

    #region METHODS
    // ----------------------------------------------------------
    // Methods
    // ----------------------------------------------------------

    /// <summary>
    /// Creates a partner
    /// </summary>
    public override ActionResponse Execute()
    {   
        ActionResponse response = new ActionResponse();

        IPartnerDao dao = (IPartnerDao)GetDao(typeof(IPartnerDao));
        PartnerDo partner = dao.FindByPrimaryKey(_partnerId);

        response.Add("Partner", partner);

        return response;
    }
    #endregion
}

И в коде позади я звоню:

ActionProcessor.ProcessActionAndResponse(new AdvertiserGroupLoadPartnerAction(AdelContext, partIdt));

Чтобы установить глобальное свойство в представлении:

public PartnerDo Partner
{
  get { return _partner; }
  set { _partner = value; }
 }

Что у меня улучшилось

Я считаю, что предыдущий метод не практичен. В моем случае мне нужно обновить флажки в соответствии с выбранным значением в раскрывающемся списке (AdvertiserList). Вот что я сделал, не используя ActionProcessor, иначе мне пришлось бы создать новый файл (снова):

private void AdvertiserList_SelectChanged(object sender, EventArgs e)
{
DropDownList advertiserList = (DropDownList)sender;
IPartnerDao partnerDao = (IPartnerDao)DaoFactory.Instance.GetDao(typeof(IPartnerDao));
PartnerDo partner = partnerDao.FindByPrimaryKey(ConvertToLong(advertiserList.SelectedValue))

if (partner != null)
{
   switch (partner.ClientType)
    {
        case ClientType.NewClient:
            NewClientRadio.Checked = true;
            break;
        case ClientType.LoyalClient:
            LoyalClientRadio.Checked = true;
            break;
        case ClientType.Renewing:
            RenewingRadio.Checked = true;
            break;
    }
  }
}

Мне не нравится вызывать Dao из кода позади, это может заморозить приложение, я также пытался вставить задачу Async.

Я бы хотел создать Сервис вместо:

PartnerDo partner = new PartnerDo();
using (ServiceChannel<IAdvertiserService> channel = new ServiceChannel<IAdvertiserService>())
{
partner = channel.Service.GetAdvertiserByPrimaryKey(ConvertToLong(advertiserList.SelectedValue));
}

Я не знаю, с чего начать создание такой службы, поскольку у меня уже есть Дао, мне просто нужно инкапсулировать мой запрос.

С чего мне начать? Я видел учебник, но он говорит о создании Webservie с нуля. Что мне не хватает?

Примечание: я не использую EntityFramework

...