Professional Documents
Culture Documents
-_
-_
Прв колоквиум
@ManyToOne
private Category category;
@OneToMany(mappedBy = "movie")
private List<Comment> comments;
@ManyToMany
@JoinTable(name = "actor_movie",
joinColumns = @JoinColumn(name = "movie_id"),
inverseJoinColumns = @JoinColumn(name = "actor_id"))
private List<Movie> movies;
}
@Column(name="name")
private String name;
@OneToMany(fetch=FetchType.EAGER)
private List<Movie> movies;
}
b.
@Entity
@Table(name="category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="name")
private String name;
@OneToMany(mappedBy = "category")
private List<Movie> movies;
}
c.
@Entity
@Table(name="actor")
public class Actor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="full_name")
private String fullName;
@ManyToMany
@JoinTable(name = "actor_movie",
joinColumns = @JoinColumn(name = "actor_id"),
inverseJoinColumns = @JoinColumn(name = "movie_id"))
private List<Movie> movies;
}
d.
@Entity
@Table(name="category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="name")
private String name;
@OneToMany(mappedBy = "movie.id")
private List<Movie> movies;
}
e.
@Entity
@Table(name="actor")
public class Actor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="full_name")
private String fullName;
@ManyToMany
@JoinColumn(name = "actor_movie",
joinColumns = @JoinColumn(name = "actor_id"),
inverseJoinColumns = @JoinColumn(name = "movie_id"))
private Movie movie;
}
f.
@Entity
@Table(name="comment")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOnе
@Column(name="movie")
private Movie movie;
}
g.
@ManyToMany
@Table(name="actor")
public class Actor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="fullName")
private String fullName;
@ManyToMany
@JoinTable(name = "movie_actor",
joinColumns = @JoinColumn(name = "actor_id"),
inverseJoinColumns = @JoinColumn(name = "movie_id"))
private List<Movie> movies;
}
@EntityGraph(type = EntityGraph.EntityGraphType.FETCH,
attributePaths = {"tags"})
Iterable<Video> findAll();
Ако во базата на податоци имаме зачувано 5 видеа, организирани во 2 различни категории,
колку Hibernate query-а ќе бидат генерирани доколку се повика само repository.findAll()?
Притоа се користи следната дефиниција на Video:
@Entity
@Table(name = "videos")
public class Video {
@Id
@GeneratedValue
public Long id;
@ManyToOne
public Category category; // Category нема надворешни клучеви
@ManyToMany
public List<Tag> tags = new ArrayList<>(); // Tag нема надворешни клучеви
Select one:
a. 7
b. 5
c. 3
d. 1
3. Одговор: i
4. Одговор: C, G
5. Под b.
6.
7.
8.
9.
10.
11.
12.
13. Изберете што е точно од понуденото земајќи го предвид следното сценарио: Потребно е да
изработите систем кој прави пресметки на цената на автомобил врз база на цена на деловите
од кои е составен. Дополнително, се води сметка и за бројот на автомобилски делови кои
стојат на располагање во магацин.
Ентитетите кои се користат во сценариото се следните: Car, CarPart и Warehouse.
a) Бизнис логиката за пресметката на цената на автомобилот треба да биде поствена во CarPart
ентитетот.
b) Ентитетот CarPart е корен на сопствениот агрегат
c) Бизнис логиката за пресметка на цената на автомобилот треба да биде поствена во Car
ентитетот.
d) Во сценариото постојат два агрегати, еден ги содржи енитетите Car и CarPart, другиот го
содржи само ентитетот Warehouse.
e) Ентитетот Car e корен на сопствениот агрегат.
f) Постојат три агрегати, посебен за секој ентитет. Секој од ентитетите е сопствен корен на
агрегатот.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Втор колоквиум
8. Кои од следните изрази се точни за ентитети (Entities) и вредносни објекти (Value Objects)
во ДДД?
- Вредносните објекти живеат самостојно и не зависат од останатите ентитети.
- Еднаквост меѓу два вредностни објекти од иста класа се утврдува врз база на еднаквоста на
сите атрибути кои ги поседуваат.
- За ентитетите се чува историска информација за промени.
- Сите атрибути во ентитетите не треба да се менливи (Immutable) по нивната иницијализација.
- Вредносните објекти не смее да содржат бизнис логика, туку задолжително содржат само
атрибути.
- Еднаквоста меѓу два ентитета од иста класа се утврдува врз база на примарен клуч.
-Вредносните објекти не живеат самостојно, туку најчесто припаѓаат на некој ентитет.
- Во вредносните објекти се чува комплексна бизнис логика и се оркестрира менаџирањето на
ентитетите.
9. Кои од следните изрази се точни за ентитети (Entities) и вредносни објекти (Value Objects)
во ДДД?
- Сите атрибути во ентитетите не треба да се менливи (Immutable) по нивната иницијализација.
- Сите атрибути во вредносните објекти треба да бидат неменливи после иницијализација.
- Во вредносните објекти се чува комплексната бизнис логика и се оркестрира менаџирањето
на ентитетите.
- Вредносните објекти немаат примарен клуч.
- Ентитетите и вредносните објекти ја чуваат својата историја на менување во база.
- Вредносните објекти немаат историја.
- Ентитетите немаат историја.
- Ентитетите имаат примарен клуч.
10. Кои од следните изрази се точни за ентитети (Entities) и вредносни објекти (Value Objects)
во ДДД?
- Вредносните објекти не смее да содржат бизнис логика, туку задолжително содржат само
атрибути.
- Ентитетите се Thread-Safe, а вредносните објекти најчесто не се.
- Еднаквоста меѓу два ентитета од иста класа се утврдува врз база на примарниот клуч.
- Еднаквост меѓу два вредносни објекти од иста класа се утврдува врз база на еднаквоста на
сите атрибути кои ги поседуваат
- Поради нивната неменливост (immutability), вредносните објекти не се Thread-Safe
- Вредносните објекти треба да бидат неменливи (immutable) штом се направи нивна
иницијализација.
- Ентитетите најчесто содржат бизнис логика и сите методи се декларирани како static за да
бидат thread-safe
- Вредносните објекти, освен атрибути, може да содржат бизнис логика.
11.
12.
15. Кои од понудение искази се точни во врска со Агрегати (Aggregates), Корен на агрегат
(Aggregate Root)?
a. Промените кои треба да се рефлектираат во другите агрегати од страна на еден агрегат,
треба да бидат постојано синхронизирани и во рамки на истата трансакција да се изврши
нивната модификација.
b. Трансакцискиот интегритет секогаш се одржува во рамки на агрегатот
c. Секој агрегат се состои од повеќе енитети, каде што само еден ентитет се
нарекува Корен на агрегатот
d. Доменски настан (Domain Event) се праќаат само преку коренот на агрегатот.
e. Операциите кои предизвикуваат промена на состојбата се извршуваат во рамки
на секој ентитет во агрегатот.
f. Секоја промена на локалните ентити во еден агрегат е независна и коренот на
агрегатот нема потреба да е свесен за истата
g. Состојбата на агрегатите задолжително мора да е постојано конзистентноа и коренот на
агрегатот е одговорен за спроведување на сите бизнис правила во рамки на агрегатот.
h. Еден агрегат може да е референциран од надворешниот свет само преку коренот на
агрегатот.
17.
Влезен адаптер:
- Безбедност на Rest сервис
- Серијализација на податочни структури во JSON/XML формат
Апликациски сервис:
- Трансакции
- Безбедност на апликациски сервиси и авторизација
Доменски модел:
- Ентитети
- Бизнис логика
Излезен адаптер:
- Кеш
- Размена на пораки со други ограничени контексти
23.
24.
25.
26.