Как использовать единственный принцип ответственности в больших wcf сервисах?

Как уже упоминалось, вы можете удалить свой макрос BASE, поскольку операторы отменяют указатели.

Я немного прояснил и исправил ваш код и объяснил, где вы идете не так:

#include <stdio.h>
#include <string.h>

struct animal
{
    int walk;
    int hear;
};

struct bird
{
    struct animal *base;
    int fly;
};

void display(struct animal *common)
{
    printf("All animal details hear=%d  walk=%d\n",common->hear, common->walk);
}

int main()
{
    struct bird peacock; // removed ptr suffix, since it is not a pointer
    struct animal base ;

    base.hear=1;
    base.walk=1;

    peacock.base= &base;

    struct bird *peacockptr = &peacock;
    peacockptr->fly=1;

    printf("base address using peacock struct %p\n",  (void *)*(struct animal **)peacockptr); //This is the address of base using peackockptr
    printf("base address animal %p\n", (void *)&base); //This is the address of base

    display(&base);
    display(*(struct animal **)peacockptr);

    return 0;
}

Обратите внимание, что адрес peackock равен адресу первого элемента структуры, который является struct animal *. Поэтому вы должны привести peacockptr к struct animal ** (потому что он указывает на первый элемент типа struct animal *), а затем разыменовать его, чтобы получить адрес base.

5
задан Sorskoot 14 January 2009 в 21:43
поделиться

2 ответа

Я думаю, что Вы путаете единственную ответственность с интерфейсной сегрегацией.

С точки зрения интерфейса клиента/сервиса необходимо сохранить наклон контрактов и средний. Посмотрите ниже для примера этого.

На стороне SRP вещей, которые должны быть совершенно внутренними к реализации услуги и клиенту, не должен знать об этом. Если Вы, служебный код является слишком большим, разделяет его на классы. Затем имейте свой служебный код, по крайней мере первоначально, действие как фасад и переведите все вызовы к соответствующим объектам. Позже, у Вас есть опция разделения Вашего сервиса в многочисленные услуги. Но знайте, что SOA и объектно-ориентированное проектирование, хотя перекрытие, являются отдельными и имеют различные требования.

Интерфейсный пример сегрегации: у Нас есть сервис здесь на работе, которую мы используем, чтобы сделать различные функции на некоторых бизнес-объектах. Исходный сервис имел один интерфейс. Как это выросло, мы поняли, что у нас было три семейства методов: персистентность объекта данных, бизнес-обновления, бизнес-анализ. Мы разводимся в три контракта. Наш клиент/сервис реализует все 3, таким образом, единственная вещь, которую мы должны были сделать, была разделена контракт в три, и установите две дополнительных конечных точки в нашей конфигурации WCF. Очень простой.

Надеюсь, это поможет.

7
ответ дан 14 December 2019 в 01:19
поделиться

Я предложил бы, чтобы Вы слушали этот подкаст на hanselminutes:

ТВЕРДЫЕ принципы с дядей Bob - Robert C. Martin

Это помогло бы понять вещи лучше...

1
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: