Java Guru πŸ€“
13.2K subscribers
891 photos
17 videos
761 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
πŸ‘22
КакиС Π΅ΡΡ‚ΡŒ кэши Π² Hibernate ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?

3 уровня ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ:

β€’ КСш ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня (First-level cache). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.
β€’ КСш Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня (Second-level cache). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½.
β€’ КСш запросов (Query cache). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½.
πŸ‘21
Π§Π΅ΠΌ отличаСтся Lazy ΠΎΡ‚ Eager Π² Hibernate?

β€’ Eager Loading β€” стратСгия Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠ° связанных сущностСй происходит сразу. Для примСнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (@OneToOne, @ManyToOne, @OneToMany, @ManyToMany) ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ fetch = FetchType.EAGER. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ @OneToOne ΠΈ @ManyToOne.
β€’
Lazy Loading β€” стратСгия Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠ° связанных сущностСй откладываСтся ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ дольшС. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΡƒΠΆΠ½ΠΎ Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (@OneToOne, @ManyToOne, @OneToMany, @ManyToMany) ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ fetch = FetchType.LAZY. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ @OneToMany, @ManyToMany. Π”ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ proxy-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, вмСсто Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ. Если ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ LAZY-полю послС закрытия сСссии Hibernate, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ LazyInitializationException.
πŸ‘25
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘15
Как ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΈ использовании Hibernate?

На всякий случай: составной ΠΊΠ»ΡŽΡ‡ β€” ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ составной ΠΊΠ»ΡŽΡ‡ ΠΏΡ€ΠΈ использовании Hibernate, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ этот ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ полями ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ
@Embeddable. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Serializable ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ equals ΠΈ hashcode.

Π’ самой ΠΆΠ΅ сущности, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ описываСм составной ΠΊΠ»ΡŽΡ‡, добавляСм ΠΏΠΎΠ»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданного класса ΠΊΠ»ΡŽΡ‡Π° ΠΈ вСшаСм Π½Π° Π½Π΅Π³ΠΎ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ
@EmbeddedId.
πŸ‘28
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘13
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
15%
falsetrue
35%
falsefalse
31%
truetrue
19%
truefalse
πŸ‘26🀨10😒7πŸ†2🌚1
Как ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ наслСдованиС Π½Π° Π‘Π” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JPA (Hibernate)?

Π•ΡΡ‚ΡŒ 4 способа ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ наслСдованиС Π½Π° Π‘Π” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JPA (Hibernate):

β€’ MappedSuperclass β€” поля родитСля содСрТатся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ класса. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚. На Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс навСшиваСм
@MappedSuperClass, Π° Π²ΠΎΡ‚ Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ @Entity. Если Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΏΠΎΠ»Π΅ родитСля называСтся Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС, Ρ‚ΠΎ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠ°ΠΏΠΏΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @AttributeOverride Π² классС этого ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ассоциации. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… запросах Ρƒ нас Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ запросы для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
β€’ Single table β€” вся иСрархия классов Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ классы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ-дискриминатор. Π’ Π΄Π°Π½Π½ΠΎΠΉ стратСгии Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ
@Entity-класс Π½Π°Π²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ @Inheritance(strategy = InheritanceType.SINGLE_TABLE) ΠΈ @DiscriminatorColumn(name = "YOUR_DISCRIMINATOR_COLUMN_NAME") (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ имя ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ DTYPE ΠΈ Ρ‚ΠΈΠΏ VARCHAR). Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ подклассС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ @DiscriminatorValue("ThisChildName") со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅-дискриминаторС для Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. Если Π½Π΅Ρ‚ возмоТности Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @DiscriminatorFormula, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ CASE...WHEN β€” это Π½Π΅ ΠΏΠΎ JPA, Ρ„ΠΈΡˆΠΊΠ° Hibernate. ДСнормализация. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ запросы ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ цСлостности β€” столбцы подклассов ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ NULL.
β€’ Joined table β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для всСх классов ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ родитСля. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свои поля, Π° Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… добавляСтся внСшний (ΠΎΠ½ ΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ) ΠΊΠ»ΡŽΡ‡ для связи с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ. Π’
@Entity-класс родитСля добавляСм @Inheritance(strategy = InheritanceType.JOINED). Для ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ JOIN, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ CASE...WHEN, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля _clazz, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ заполняСтся Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ (0 (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ), 1, 2 ΠΈ Ρ‚.Π΄.) ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Hibernate ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса Π±ΡƒΠ΄Π΅Ρ‚ экзСмпляр.
β€’ Table per class β€” Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² MappedSuperclass, ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подкласса. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚. По спСцификации JPA 2.2 данная стратСгия являСтся ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π² Hibernate Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, поэтому ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΌΡ‹ навСшиваСм
@Entity ΠΈ @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS). ПолС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° (@Id) ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса. Π’Π°ΠΊΠΆΠ΅ аннотация @AttributeOverride Π² этой стратСгии Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” Π½Π°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ поля Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… сразу Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ запрос Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ UNION для объСдинСния Ρ‚Π°Π±Π»ΠΈΡ†. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ создании экзСмпляров подклассы, Hibernate добавляСт ΠΏΠΎΠ»Π΅ _clazz Π² запросы, содСрТащиС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ (1, 2 ΠΈ Ρ‚.Π΄.). А ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ столбцов для объСдинСния добираСтся ΠΊΠ°ΠΊ NULL AS some_field. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ассоциации с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сущностями.
πŸ‘28
Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра Iterator ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NoSuchElementException?
Anonymous Quiz
5%
add()
50%
next()
30%
remove()
15%
hasNext()
πŸŽ„17πŸ‘15🌭1
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ coupling ΠΈ cohesion? Π§Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… (ΠΈΠ»ΠΈ ΠΎΠ±Π°) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ (высоким) ΠΈ/ΠΈΠ»ΠΈ слабым (Π½ΠΈΠ·ΠΊΠΈΠΌ)?

Coupling (Π—Π°Ρ†Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅) β€” ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΠΉ.

Cohesion (Π‘Π²ΡΠ·Π½ΠΎΡΡ‚ΡŒ) β€” ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ сфокусированности ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса. Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ высокой.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ
Ρ‚ΡƒΡ‚ Π½Π° русском.
πŸ‘25❀‍πŸ”₯3🌚2⚑1
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘9
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
24%
NullPointerException
12%
ClassCastException
16%
Integer
47%
Код Π½Π΅ скомпилируСтся
πŸ‘19πŸŽ„5
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΡƒΠ± ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ?

ΠšΡƒΠ± ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (scale cube, ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ The Art of Scalability) являСтся наглядным ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Ρ‘Ρ… ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… способов увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния: sharding, mirrorring ΠΈ microservices.

β€’
Sharding (data partioning) β€” Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌ.
β€’
Mirroring (horizontal duplication) β€” Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°.
β€’
Microservices β€” Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы разбиваСтся Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы ΠΏΠΎ бизнСс-Π·Π°Π΄Π°Ρ‡Π°ΠΌ.
πŸ‘18πŸ”₯3
Π§Π΅ΠΌ сСрвисная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° отличаСтся ΠΎΡ‚ микросСрвисной?

БСрвис-ориСнтированная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° (SOA) β€” нСзависимый ΠΎΡ‚ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π° основС распрСдСлённых, слабосвязанных замСняСмых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ интСрфСйсами ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ взаимодСйствия. ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΡ…Π²Π°Ρ‚Π° SOA β€” это всё прСдприятиС, Π³Π΄Π΅ происходит взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями. SOA Π΄Π΅Π»Π°Π΅Ρ‚ ставку Π½Π° доступ ΠΊ бизнСс-функциям прСдприятия Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ интСрфСйсы.
БСрвис Π² Π΄Π°Π½Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅:
β€’ прСдставляСт бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ (ΠΌΠ½ΠΎΠ³ΠΎ отвСтствСнностСй, связанных Π΅Π΄ΠΈΠ½ΠΎΠΉ бизнСс-ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ, Ρ†Π΅Π»ΡŒΡŽ, смыслом ΠΈ Ρ‚.ΠΏ.);
β€’ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвисов ΠΈΠ»ΠΈ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π½ΠΈΡ…;
β€’ являСтся "Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ ящиком" для своих ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
Как ΠΈ всС ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Ρ‡Π΅ΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ свой
манифСст

ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° (MSA) β€” частный случай SOA, ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ взаимодСйствиС насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ…, слабосвязанных, Π»Π΅Π³ΠΊΠΎ измСняСмых ΠΈ взаимозамСняСмых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (микросСрвисов). MSA ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π° структуру ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния.
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡ:
β€’ выполняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ достаточно ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½ΡƒΡŽ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Unix way β€” СдинствСнная ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ);
β€’ дСплоится ΠΈ разрабатываСтся нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… микросСрвисов;
β€’ являСтся нСзависимым ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… микросСрвисов (Π² Ρ‚ΠΎΠΌ числС максимальная минимизация ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°);
β€’ являСтся "Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ ящиком" для своих ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

МоТно Π½Π°ΠΉΡ‚ΠΈ нСсколько источников, Π³Π΄Π΅ MSA прСдставляСтся ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅, Π° SOA β€” староС ΠΈ ΡƒΠΌΠΈΡ€Π°ΡŽΡ‰Π΅Π΅. Часто это Π΅Ρ‰Ρ‘ ΠΈ подаётся ΠΏΠΎΠ΄ соусом Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ИМΠ₯О β€” это большС маркСтинговая Ρ‚ΡƒΡ„Ρ‚Π°, Ρ‡Π΅ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ сравнСниС. MSA ΠΈ SOA Π½Π΅ завязаны Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π² ΠΈΡ… использовании. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ с пользой для бизнСса.
πŸ‘19πŸ”₯10❀1β˜ƒ1
КакиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΡƒΠ΄ΡƒΡ‚ Π±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ main?
πŸ‘12
КакиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΡƒΠ΄ΡƒΡ‚ Π±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ main?
Anonymous Quiz
38%
IndexOutOfBoundsException
29%
Код Π½Π΅ скомпилируСтся
21%
NullPointerException
12%
ClassCastException
πŸ‘16πŸ‘Œ6🌭2
КакиС Π΅ΡΡ‚ΡŒ ограничСния Ρƒ микросСрвисов? НазовитС достоинства ΠΈ нСдостатки микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

Достоинства:
β€’ МСньшС ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (микросСрвис) -> ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящих Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ инструмСнтов (Π² Ρ‚ΠΎΠΌ числС Π½Π° Π½ΠΎΠ²Ρ‹Π΅)
β€’ МСньшС ΠΊΠΎΠΌΠ°Π½Π΄Π° -> мСньшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΌΡ‘Ρ€ΠΆΠ΅ ΠΈ совмСстной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅
β€’ ΠŸΡ€ΠΎΡ‰Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
β€’ БыстрСС ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ

НСдостатки:
β€’ Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ (микросСрвисами) β€” ΠΎΠ±ΠΌΠ΅Π½ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ выполняСтся ΠΏΠΎ сСти со всСм Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌ (сСриализация/дСсСриализация, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Ρ‚.Π΄.)
β€’ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ появлСниС нСобходимости распрСдСлённых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ
β€’ Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² логирования ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°
β€’ Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
β€’ Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π΄Π΅Π±Π°ΠΆΠΈΡ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ошибки
β€’ НуТно Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΈ способным ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° любой ΠΈΠ· микросСрвисов отвалится
β€’ ΠžΠ±Ρ‰Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ растёт с количСством микросСрвисов
πŸ‘38πŸ€”2
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘7
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
17%
Exception
22%
ArithmeticExceptionFinally
29%
Код Π½Π΅ скомпилируСтся
31%
ExceptionFinally
🌚12πŸ‘8πŸ†3🌭2