Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ДСфрагмСнтация ΠΌΠΎΠ·Π³Π°. БофтостроСниС ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 38

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ Варасов

</set>

<many-to-one name="EntityRegistry" class="Domain.Core.EntityRegistry" unique="true">

<column name="NI_ENTITY_REGISTRY" not-null="false" />

</many-to-one>

<property name="Name" access="property">

<column name="NAME" not-null="false" />

</property>

<property name="Granularity" access="property">

<column name="GRANULARITY" not-null="true" />

</property>

<property name="FromDate" access="property">

<column name="FROM_DATE" not-null="true" />

</property>

<property name="ToDate" access="property">

<column name="TO_DATE" not-null="true" />

</property>

<property name="Closed" access="property" type="YesNo">

<column name="CLOSED" not-null="true" />

</property>

<property name="CreatedBy" access="property">

<column name="CREATED_BY" not-null="false" />

</property>

<property name="CreatedDate" access="property" type="timestamp">

<column name="CREATED_DATE" not-null="false" />

</property>

<property name="LastModifiedBy" access="property">

<column name="LAST_MODIFIED_BY" not-null="false" />

</property>

<property name="LastModifiedDate" access="property" type="timestamp">

<column name="LAST_MODIFIED_DATE" not-null="false" />

</property>

</class>

Π‘Π»ΠΎΠΉ Π²Π΅Π±-слуТб ΠΈ интСрфСйсов доступа (ServiceStack)

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ для слоя Π²Π΅Π±-слуТб C#-Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для создания Π΄Π²ΡƒΡ… сборок: собствСнно слуТб ΠΈ интСрфСйсов ΠΊ Π½ΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ.

Рис. 25. ΠšΠ»Π°ΡΡΡ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ слуТбы доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π΄ΠΎΠΌΠ΅Π½Π°

Рис. 26. Класс слуТбы сохранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ доступа ΠΊ слуТбам Ρ‚Π°ΠΊΠΆΠ΅ содСрТат описания пСрСчислимых Ρ‚ΠΈΠΏΠΎΠ² с Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, классы DTO для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ состояния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ, классы для нСпосрСдствСнного доступа ΠΊ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ слуТб.

Рис. 27. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ слоя Π²Π΅Π±-слуТб

Рис. 28. ΠšΠ»Π°ΡΡΡ‹ Π²Ρ‹Π·ΠΎΠ²Π° спСцифицированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Рис. 29. ΠšΠ»Π°ΡΡΡ‹ Π²Ρ‹Π·ΠΎΠ²Π° Π²Π΅Π±-слуТб, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ «финансового Π³ΠΎΠ΄Π°Β»

Рис. 30. Класс Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ «Ѐинансовый Π³ΠΎΠ΄Β»

Рис. 31. Класс Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² «Ѐинансовый Π³ΠΎΠ΄Β»

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с DTO ΠΈ коллСкциями Π½Π΅ слишком ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ, проявляСтся ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Но Ссли ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с DTO Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΊΠΎΠ΄ становится Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с DTO

CurrencyDTO curr1 = new CurrencyDTO();

curr1.Code = "RUR";

curr1.Name = "Currency 1";

UnitOfWorkDTO uow = new UnitOfWorkDTO();

uow.Save(curr1);


PersistenceRequest prq1 = new PersistenceRequest();

prq1.UnitOfWork = uow;

PersistenceResponse prr1 = client.Post<PersistenceResponse>("/Persistence", prq1);

Assert.IsFalse(prr1.CommitResult.HasError, prr1.CommitResult.Message);


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ

Currency curr1 = new Currency();

curr1.Code = "RUR";

curr1.Name = "Currency 1";

CommitResult cr1 = curr1.Save();

Assert.IsFalse(cr1.HasError, cr1.Message);

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ‚

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ WinForms-прилоТСния создадим Ρ„ΠΎΡ€ΠΌΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ сСтки отобраТСния финансовых Π³ΠΎΠ΄ΠΎΠ² ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ². НС вдаваясь Π² Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ этого Ρ‚ΠΈΠΏΠ°, просто ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρƒ слуТб ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².


Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ списка финансовых Π³ΠΎΠ΄ΠΎΠ², ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ названию

FiscalYearCollection years = FiscalYearCollection.GetByQuery(

"from FiscalYear where Name like: name order by Name",

new ServicesQueryParams()

AddParam("name", txtYearName.Text)

);

dgvYears.DataSource = years;


Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ списка ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ² Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°

PeriodCollection periods = PeriodCollection.GetByQuery(

"from Period where FiscalYear.Id =:yearId order by FromDate",

new ServicesQueryParams()

AddParam("yearId", CurrentYear.Id),

0, 1000);

dgvPeriods.DataSource = periods;


ЗапускаСм клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ запустив сСрвСр Π²Π΅Π±-слуТб, ΠΈ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° экранС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΊΠ°ΠΊ Π½Π° рис. 32.

Рис. 32. Π€ΠΎΡ€ΠΌΠ° отобраТСния финансовых Π³ΠΎΠ΄ΠΎΠ² ΠΈ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ²

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΎΠ³Π»ΡΠ½ΡƒΡ‚ΡŒΡΡ

РассмотрСнная Π²Ρ‹ΡˆΠ΅ подсистСма состоит ΠΈΠ· минимального Π½Π°Π±ΠΎΡ€Π° слоёв Ρ‚Ρ€Ρ‘Ρ…Π·Π²Π΅Π½Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π° основС Π²Π΅Π±-слуТб. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π°ΠΆΠ΅ Π² Ρ‚Π°ΠΊΠΎΠΌ минимальном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΎΠ±ΠΈΠ»ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈ слуТСбных классов, ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ прСдставлСниС ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ слоТности соврСмСнного состояния софтостроСния.

Одним ΠΈΠ· способов ΠΎΠ±Ρ…ΠΎΠ΄Π° этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся описанная тСхнология ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, нСсомнСнно далёкая ΠΎΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Π° ΠΈ ограничСнная Π² Π½Π°Π±ΠΎΡ€Π΅ Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

Какова ΠΆΠ΅ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ?


Если Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ 40 ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… сущностСй Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ, состоящСй ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΈΠ· 600 строк XML-описаний, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚:

β€’ ΠΎΠΊΠΎΠ»ΠΎ 3 тысяч строк SQL-скриптов для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… Π‘Π£Π‘Π”;

β€’ ΠΏΠΎΡ€ΡΠ΄ΠΊΠ° 10 тысяч строк Π΄ΠΎΠΌΠ΅Π½Π°;

β€’ 1200 строк XML для ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ классов Π½Π° рСляционныС структуры (Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹);

β€’ ΠΎΠΊΠΎΠ»ΠΎ 17 тысяч строк Π²Π΅Π±-слуТб ΠΈ интСрфСйсов.


Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ числа строк ΠΌΠ΅Ρ‚Π°-ΠΊΠΎΠ΄Π° описания ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊ ΠΊΠΎΠ΄Ρƒ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ… ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… составляСт ΠΎΠΊΠΎΠ»ΠΎ 600 ΠΊ 30 тысячам ΠΈΠ»ΠΈ 1 ΠΊ 50.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ оснащённый срСдствами Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ программист с Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ модСлирования Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΈ спСцифичного для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ/Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΅Π³ΠΎ 50 ΠΊΠΎΠ»Π»Π΅Π³, Π½Π΅ Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ модСлям. Π›ΡŽΠ±ΠΎΠ΅ внСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² модСль Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π² соотвСтствиС всС Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ слои систСмы, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Ρ‹Π² ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€ΡƒΡ‡Π½Ρ‹ΠΌΠΈ модификациями. НаконСц, для Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ тСсты. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ возрастаСт Π΅Ρ‰Ρ‘ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π²Π΄Π²ΠΎΠ΅.

Π”Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ доля Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ инфраструктурного ΠΊΠΎΠ΄Π° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌΡƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΌΡƒ собствСнно Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, сниТаСтся с ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠΌ систСмы, Π΅ΡΡ‚ΡŒ ΠΎ Ρ‡Ρ‘ΠΌ ΠΏΠΎΡ€Π°Π·ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π² спокойной обстановкС.

Cherchez le bug, ΠΈΠ»ΠΈ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ-французски

Π­Ρ‚ΠΎΡ‚ рассказ я написал Π±ΠΎΠ»Π΅Π΅ 10 Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄, Π»Π΅Ρ‚ΠΎΠΌ 2001 Π³ΠΎΠ΄Π°, Π² ΠΏΠΎΠ΅Π·Π΄ΠΊΠ°Ρ… Π½Π° ΠΏΡ€ΠΈΠ³ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΠ΅Π·Π΄Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠŸΠ°Ρ€ΠΈΠΆΠ΅ΠΌ ΠΈ Moulin-Galant, Π³Π΄Π΅ размСщался Ρ„ΠΈΠ»ΠΈΠ°Π» IBM, ΠΈ ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ сомнСвался Π² нСобходимости Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΊΠ½ΠΈΠ³Ρƒ. Но, просмотрСв старый тСкст, с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Ссли Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² названиях Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π½Π° Β«Π½ΠΎΠ²Ρ‹Π΅ ΠΈ прогрСссивныС», Ρ‚ΠΎ ΡΡƒΡ‚ΡŒ повСствования останСтся ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡΡ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘ Ρ‡Π΅Ρ€Π΅Π· 10 Π»Π΅Ρ‚, ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ врСмя.

Π₯аос наступаСт Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Β«Π±Π°Π³Β» Π·Π½Π°ΡŽΡ‚, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, всС программисты. ΠšΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚, поясню: Β«Π±Π°Π³Β» (ΠΎΡ‚ Π°Π½Π³Π». bug – ΠΆΡƒΡ‡ΠΎΠΊ) β€“ это Β«ΠΆΡƒΡ‡ΠΎΠΊ-Π²Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΒ» Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ошибка, аномалия, сбой. По-французски это ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ словСчко произносится ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠ°ΠΊ Β«Π±Ρ‘Π³Β», Π½ΠΎ Π±ΡƒΠΊΠ²Π° Β«Ρ‘Β» произносится Π±Π»ΠΈΠΆΠ΅ ΠΊ Π·Π²ΡƒΠΊΡƒ Β«ΠΎΒ». ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ французской, ΠΊΠ°ΠΊ, собствСнно, ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ индустрии – Π³Ρ€ΠΎΠΌΠΊΠΎΠ΅ слово, нСсколько ΠΎΠ±Π»Π°Π³ΠΎΡ€Π°ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Π½Π°ΡˆΡƒ Π²ΡΠ΅ΠΌΠΈΡ€Π½ΡƒΡŽ «багодСльню», являСтся ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… состояний французской Π΄ΡƒΡˆΠΈ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ этакого сангвиника послС распитого с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ Π±ΠΎΠΊΠ°Π»Π° Π²ΠΈΠ½Π°, Π³Π°Π»Π°Π½Ρ‚Π½ΠΎΠ³ΠΎ ΠΈ совсСм Π½Π΅ торопящСгося ΠΆΠΈΡ‚ΡŒ. РазумССтся, сангвиник считаСт, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π° Π²Π΅Π»ΠΈΠΊΠΈ ΠΈ прСкрасны, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ Π½Π° Π½ΠΎΡ‡Π½ΠΎΠΉ ΠŸΠ°Ρ€ΠΈΠΆ с ΠœΠΎΠ½ΠΌΠ°Ρ€Ρ‚Ρ€ΡΠΊΠΎΠ³ΠΎ Ρ…ΠΎΠ»ΠΌΠ° ΠΈΠ»ΠΈ ΠΏΡ‹Π»ΡŒΠ½Ρ‹ΠΉ Π³ΠΎΠ±Π΅Π»Π΅Π½ Π½Π°Π΄ ΠΊΡ€ΠΎΠ²Π°Ρ‚ΡŒΡŽ НаполСона Π² Π·Π°ΠΌΠΊΠ΅ Π€ΠΎΠ½Ρ‚Π΅Π½Π±Π»ΠΎ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ ΠΏΡ€ΠΈΡˆΡ‘Π» ΠΊΠΎ ΠΌΠ½Π΅ ΡƒΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ нСдСль послС Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π½ΠΎΠ²ΠΎΠΌ мСстС. НС считая сСбя экспСртом ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Π‘++, ΡƒΠ²ΠΈΠ΄Π΅Π² исходныС тСксты, я ΠΎΡ‰ΡƒΡ‚ΠΈΠ» мягко говоря, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ бСспокойство. Бтолкнулся я с этими тСкстами Π½Π΅ сразу, Ρ‚Π°ΠΊ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Π² ΠΊΠΎΠ½Ρ‚ΠΎΡ€Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΈΠ»ΠΈΡΡŒ Π΄Π²ΠΎΠ΅ русских программистов, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΏΠΎΠΊΠΈΠ½ΡƒΠ» Ρ„ΠΈΡ€ΠΌΡƒ, Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π”ΠΈΠΌΠΎΠΉ, ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ Π³ΠΎΠ΄Π° Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π΅Ρ‘ Π»ΠΈΠΊΠ²ΠΈΠ΄Π°Ρ†ΠΈΠΈ.

Π˜Ρ‚Π°ΠΊ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя я находился Π² счастливом Π½Π΅Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ состояния Π΄Π΅Π». ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ качСство ΠΊΠΎΠ΄Π°. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π΄ΠΈΠ½Ρ‹Π΅ соглашСния отсутствовали, Π° Java-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Π‘++ Π½Π΅ являлось большим нСдостатком – Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ, Ρ‡Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄Π° Π½Π° Java Π² систСмС Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ. ΠŸΡ€Π΅ΠΆΠ½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π½Π΅ смогли Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ сСбя Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Π° Π΄ΠΎ структурного программирования ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΠ»ΠΈΡΡŒ. Если ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π½Π΅ сразу Π±Ρ€ΠΎΡΠ°Π»ΠΎΡΡŒ Π² Π³Π»Π°Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ достаточного числа классов с пустыми конструкторами, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π΅Π·Π°Π»ΠΎ Π³Π»Π°Π· ΠΎΠ±ΠΈΠ»ΠΈΠ΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠ² ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… мСст ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ кусками ΠΊΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΈΠΌΡ‘Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… функциях, написанных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ копирования тСкста Ρ‡Π΅Ρ€Π΅Π· Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°, Β«copy-pasteΒ». ΠŸΡ€ΠΈ Π²ΠΈΠ΄Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΡ€ΠΎΠΌΠ΅ чисто русских ΡΠΌΠΎΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· мСня пСриодичСски Π²Ρ‹Π»Π΅Π·Π°Π»ΠΎ французскоС Β«Ρ‡Ρ‚ΠΎ Π·Π° Π±ΠΎΡ€Π΄Π΅Π»ΡŒΒ», Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π΅ ΠΏΠΎΡ…Π²Π°Π»Ρƒ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π²ΡˆΠ΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ я дСлаю успСхи Π² освоСнии языка.

Π’ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΎ-мальски слоТного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ стадия, ΠΊΠΎΠ³Π΄Π° систСма ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΡ€ΠΎΠ³ увСличСния слоТности, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ наступаСт состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я Π½Π°Π·Ρ‹Π²Π°ΡŽ Β«ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Тизнью». Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ хаос, Π½ΠΎ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ порядок. ВсС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, всячСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, стандарты ΠΈ административныС ΠΌΠ΅Ρ€Ρ‹ Ρ…ΡƒΠ΄ΠΎ-Π±Π΅Π΄Π½ΠΎ, Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΎΡ‚Ρ‚ΡΠ½ΡƒΡ‚ΡŒ этот критичСский ΠΏΠΎΡ€ΠΎΠ³ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ – Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ систСмы останавливаСтся ΠΈ ΠΎΠ½Π°, ΠΏΠΎΠ±Ρ‹Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΌ состоянии, ΠΏΠΎΡ‚ΠΈΡ…ΠΎΠ½ΡŒΠΊΡƒ ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚. Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ производства ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния состоит Π² отсутствии ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… описаний Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ программиста. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² тСхнологичСской ΠΊΠ°Ρ€Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сварщик ΠΈΠ»ΠΈ ΠΊΠ°ΠΌΠ΅Π½Ρ‰ΠΈΠΊ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ программист Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈ ΠΎΠ½ сам. Π”ΠΎ Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠ°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС Π΄ΠΎΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚, Π° Π²ΠΎΡ‚ с Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ рядового Турналиста «нСзависимой» Π³Π°Π·Π΅Ρ‚Ρ‹ нСпосвящённому Π² софтостроСниС Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ. Π­Ρ‚Π°ΠΊΠΈΠΉ ядрёный сплав рСмСсла, Π½Π΅ΠΊΠΎΠ³ΠΎ Π±ΠΎΠ³Π΅ΠΌΠ½ΠΎΠ³ΠΎ искусства, со вкраплСниями Π½Π°ΡƒΠΊΠΈ, Π²ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΊΡƒ с Ρ…Π°Π»Ρ‚ΡƒΡ€ΠΎΠΉ, шабашкой ΠΈ постоянным Π°Π²Ρ€Π°Π»ΠΎΠΌ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚ΡŒ программиста Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ самой Ρ†Π΅Π»ΠΈ сущСствования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΊΠ°ΠΊ самого Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… срСдств Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π΅Ρ‡Π΅Π½Ρ‹ Π½Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ.