Logika w encjach?

Odpowiedz Nowy wątek
2018-10-01 11:12

Rejestracja: 2 lata temu

Ostatnio: 3 dni temu

0

Co sadzicie na ten temat? Jedni uważają, że to jest najgorsze zło.
Zaś drudzy popieraja?

DDD mówi że logika w encjach powinna być implementowana tak bardzo na ile jest to możliwe w encjach/vo.

*nie wiedziałem w jakim dziale utworzyć temat, jak coś prosze o przeniesienie

Pozostało 580 znaków

2018-10-01 11:15

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

3

Encje JPA =/= encje w rozumieniu DDD.

Pozostało 580 znaków

2018-10-01 11:22

Rejestracja: 2 lata temu

Ostatnio: 3 dni temu

0
CountZero napisał(a):

Encje JPA =/= encje w rozumieniu DDD.

? to czym sa w rozumieniu DDD?

Pozostało 580 znaków

2018-10-01 11:41

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

0

Raczej czym są encje w rozumieniu JPA - one tylko mapują dane z bazy danych na obiekty javowe. Encje DDD są obiektami domenowymi na których wykonywana jest logika biznesowa. Czemu logika biznesowa ma być przywiązana do konkretnego typu bazy danych? A jak zmienisz bazę z SQL na NoSQL, lub dane na przykład będą pochodzić z zewnętrznego serwisu, to cała logika zapisana w encji JPA idzie do kosza?

Pozostało 580 znaków

2018-10-01 11:48

Rejestracja: 2 lata temu

Ostatnio: 3 dni temu

0

W takim razie.. Jest to sample entity napisana kierujac sie DDD, moze nie ma tu nie wiadomo jakiej logiki, ale jednak cos jest;]


@Value
@EqualsAndHashCode(of = "id", callSuper = false)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Order extends AbstractAggregateRoot<Order> {

    UUID id;
    List<LineItem> lineItems;
    @Wither(AccessLevel.PRIVATE) Status status;

    public static Order newOrder() {
        return new Order(UUID.randomUUID(), new ArrayList<>(), Status.PLACED);
    }

    public Order add(ProductInfo product, long quantity) {

        if (status == Status.COMPLETED) {
            throw new IllegalStateException("Order already completed.");
        }

        lineItems.stream() //
                .filter(it -> it.hasProductNumber(product.getProductNumber())) //
                .findFirst() //
                .map(it -> it.addAmount(quantity)) //
                .orElseGet(() -> {

                    LineItem item = LineItem.of(product, quantity);
                    lineItems.add(item);

                    return item;
                });

        return this;
    }

    public Order complete() {

        Order order = withStatus(Status.COMPLETED).andEventsFrom(this);

        return order.andEvent(OrderCompleted.of(order));
    }

    private enum Status {
        PLACED, COMPLETED;
    }

    @Getter
    @AllArgsConstructor
    public static class LineItem {

        private final ProductNumber productNumber;
        private final BigDecimal price;
        private final String description;
        private Long quantity;

        public static LineItem of(ProductInfo info, Long quantity) {
            return new LineItem(info.getProductNumber(), info.getPrice(), info.getDescription(), quantity);
        }

        boolean hasProductNumber(ProductNumber number) {
            return this.productNumber == number;
        }

        LineItem addAmount(Long delta) {

            this.quantity = this.quantity + delta;

            return this;
        }
    }

    @Value
    @RequiredArgsConstructor(staticName = "of", access = AccessLevel.PRIVATE)
    public static class OrderCompleted {
        Order order;
    }
}

Pozostało 580 znaków

2018-10-01 14:02

Rejestracja: 5 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Poznań

2

Encja w JPA - obiekt który zapisujesz do bazy danych
Encja w DDD - obiekt biznesowy modelujący procesy biznesowe

To są dwa różne pojęcia i nie powinno się ich mylić 


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2018-10-01 14:13

Rejestracja: 2 lata temu

Ostatnio: 3 dni temu

0
danek napisał(a):

Encja w JPA - obiekt który zapisujesz do bazy danych
Encja w DDD - obiekt biznesowy modelujący procesy biznesowe

To są dwa różne pojęcia i nie powinno się ich mylić 

to pewnie dlatego, bo w przykladzie ktory podeslalem uzyte jest mongodb, a nie jakakolwiek sqlowa baza i jpa

Pozostało 580 znaków

2018-10-01 14:30

Rejestracja: 6 lat temu

Ostatnio: 52 minuty temu

Lokalizacja: Wrocław

2

Nie ma znaczenia czy jest to mongo czy baza sqlowa. To wciąż całkiem inne pojęcia. Encja domenowa nie powinna nic wiedzieć o persystencji a encja bazodanowa się na tej persystencji opiera

edytowany 1x, ostatnio: baant, 2018-10-01 14:30

Pozostało 580 znaków

2018-10-01 15:03

Rejestracja: 2 lata temu

Ostatnio: 3 dni temu

1
baant napisał(a):

Nie ma znaczenia czy jest to mongo czy baza sqlowa. To wciąż całkiem inne pojęcia. Encja domenowa nie powinna nic wiedzieć o persystencji a encja bazodanowa się na tej persystencji opiera

to jak wyglada taka encja domenowa???

ja zauwazylem ze z tym ddd to co kod to obyczaj xDD

https://github.com/ChristophKnabe/spring-ddd-bank , tu gosciu pisze ze chcial zastosowac ddd,
po czym pozniej w (jak mam rozumiec) encjach jpa/bazodanowych napieprza sobie repository, fetchuje dane etc.

tak samo przyklad powyzej z mongo, twierdzicie ze to nie ddd, czyli oliver gierke to generalnie nieogar?;)

edytowany 3x, ostatnio: Merylin, 2018-10-01 15:04
nie widze mongo w kodzie który podałeś wyżej - baant 2018-10-01 15:12
mozesz zaufac mi na slowo ze jest embedded mongo, nie musi byc zdefiniowane @Document - Merylin 2018-10-01 15:19

Pozostało 580 znaków

2018-10-01 15:11

Rejestracja: 5 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Poznań

0

Encja domenowa -> tam gdzie są jakieś operacje, logika, cokolwiek
Encja JPA -> Struktura danych, bez metod poza getterami i setterami


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.
czyli co, przykladowo majac Customer'a, chcac byc DDD powinienem utworzyc klase 'CustomerJPA' ktora bedzie encja i 'Customer' w ktorym bedzie logika? :D - Merylin 2018-10-01 15:15
tak, dlatego DDD nie wszędzie ma sens - danek 2018-10-01 15:16
moze w tym przykladzie z mongo gierke nie chcial byc ddd, przez to wsadzil jakas tam logike w Order, ale... czy zrobil to po to zeby przyklad byl zwiezly i prosty/nie chcialo mu sie tego rozbijac na jakies managery/creatory. czy moze jednak takie rozwiazanie jest jak najbardziej okej? (bo z tego co pisal @CountZero w encjach bazodanowych nie powinno byc logiki), nie miej jednak on takie cos zastosowal :v - Merylin 2018-10-01 15:23
Nie wypowiem się o przykładzie, bo nie znam baz NoSQL. W encjach JPA trzymałbym się jednak z daleka od logiki biznesowej. - CountZero 2018-10-01 15:49

Pozostało 580 znaków

2018-10-02 19:26

Rejestracja: 5 lat temu

Ostatnio: 1 tydzień temu

0

Sam ten temat wałkowałem kilka miechów i wychodzi na to, że praktycznie wszędzie na konferencjach czy jakiś tutkach jak np. bottega encje domenowe są i tak rozbudowywane o adnotacje jpa czy mongo i wychodzi, że to to samo. Nie znalazłem przykładu, gdzie to jest oddzielnie. A jak zrobłem tak, że miałem ObjectDto -> ObjectDDD -> ObjectJPA i w drugą stronę to J. Nabrdalik odpisał mi, że bez sensu tworzyć aż takie abstrakcje, także bądź tu mądry.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0