Макрос для создания DTO типов
От: ionoy Эстония www.ammyui.com
Дата: 29.05.14 09:10
Оценка:
Начали писать серию статей по NemerleWeb, и там понадобился макрос, который сделал бы объявление типов более лаконичными.

Первый пример — это классический todo список. Для такого списка неплохо было бы создать тип:
public class Task
{
   public Name : string { get; set; }
   public Priority : string { get; set; }
   public IsDone : bool { get; set; }
}

Так как тип хотелось бы уместить внутри Unit (класс с логикой и разметкой), то получается чересчур многословно. Опять же вспоминаем одну из целей проекта — "максимальная лаконичность".

Предложение:
[Dto] class Task { Name : string; Priority : string; IsDone : bool }

По умолчанию Dto конвертирует эти поля в свойства и добавляет модификатор public. Так же создаётся конструктор, инициализирующий все поля (упрощённый вариант [Record])

Возможные опции:

[Dto(fields)] — поля остаются полями, но они мутабельные
[Dto(fields, immutable)] — поля остаются иммутабельными
[Dto(immutable)] — свойства, иммутабельные (private set)
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Макрос для создания DTO типов
От: artelk  
Дата: 29.05.14 11:44
Оценка:
Здравствуйте, ionoy, Вы писали:

I>[Dto(fields)] — поля остаются полями, но они мутабельные

I>[Dto(fields, immutable)] — поля остаются иммутабельными
I>[Dto(immutable)] — свойства, иммутабельные (private set)

А может лучше наоборот, по умолчанию сделать иммутабельность?
Re[2]: Макрос для создания DTO типов
От: ionoy Эстония www.ammyui.com
Дата: 29.05.14 12:46
Оценка:
Здравствуйте, artelk, Вы писали:

A>А может лучше наоборот, по умолчанию сделать иммутабельность?


В теории, я согласен что лучше иммутабельные по умолчанию. Но из-за специфики веба, там почти всегда нужны мутабельные поля
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Макрос для создания DTO типов
От: Аноним  
Дата: 29.05.14 13:41
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Начали писать серию статей по NemerleWeb, и там понадобился макрос, который сделал бы объявление типов более лаконичными.


I>Первый пример — это классический todo список. Для такого списка неплохо было бы создать тип:

I>
I>public class Task
I>{
I>   public Name : string { get; set; }
I>   public Priority : string { get; set; }
I>   public IsDone : bool { get; set; }
I>}
I>

I>Так как тип хотелось бы уместить внутри Unit (класс с логикой и разметкой), то получается чересчур многословно. Опять же вспоминаем одну из целей проекта — "максимальная лаконичность".

I>Предложение:

I>
I>[Dto] class Task { Name : string; Priority : string; IsDone : bool }
I>

I>По умолчанию Dto конвертирует эти поля в свойства и добавляет модификатор public. Так же создаётся конструктор, инициализирующий все поля (упрощённый вариант [Record])

I>Возможные опции:


I>[Dto(fields)] — поля остаются полями, но они мутабельные

I>[Dto(fields, immutable)] — поля остаются иммутабельными
I>[Dto(immutable)] — свойства, иммутабельные (private set)

А чем от Record отличается?
Re[2]: Макрос для создания DTO типов
От: ionoy Эстония www.ammyui.com
Дата: 29.05.14 17:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А чем от Record отличается?


Record не уменьшает количество символов, необходимых для объявления полей.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Макрос для создания DTO типов
От: kaa_t Россия  
Дата: 30.05.14 11:05
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Начали писать серию статей по NemerleWeb, и там понадобился макрос, который сделал бы объявление типов более лаконичными.


I>Первый пример — это классический todo список. Для такого списка неплохо было бы создать тип:

I>
I>public class Task
I>{
I>   public Name : string { get; set; }
I>   public Priority : string { get; set; }
I>   public IsDone : bool { get; set; }
I>}
I>

I>Так как тип хотелось бы уместить внутри Unit (класс с логикой и разметкой), то получается чересчур многословно. Опять же вспоминаем одну из целей проекта — "максимальная лаконичность".

I>Предложение:

I>
I>[Dto] class Task { Name : string; Priority : string; IsDone : bool }
I>

I>По умолчанию Dto конвертирует эти поля в свойства и добавляет модификатор public. Так же создаётся конструктор, инициализирующий все поля (упрощённый вариант [Record])

I>Возможные опции:


I>[Dto(fields)] — поля остаются полями, но они мутабельные

I>[Dto(fields, immutable)] — поля остаются иммутабельными
I>[Dto(immutable)] — свойства, иммутабельные (private set)

Можно как то так:
[Dto( Name, Priority : string, IsDone : bool)] class Task {}

//[] - свойства 
//+  - мутабельные

[Dto( [Name] = "X", Priority : string, +IsDone : bool)] class Task {}

public class Task
{
   public Name : string { get; default { "X" }  }
   public Priority : string ;
   public mutable IsDone : bool ;
}
Re[2]: Макрос для создания DTO типов
От: hardcase Пират http://nemerle.org
Дата: 30.05.14 19:10
Оценка:
Здравствуйте, kaa_t, Вы писали:

_>Можно как то так:


А зачем весь этот птичий язык? В Nemerle, емнип, есть синтаксис для свойств из коробки.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Макрос для создания DTO типов
От: kaa_t Россия  
Дата: 31.05.14 02:55
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, kaa_t, Вы писали:


_>>Можно как то так:


А зачем весь этот птичий язык?

Не знаю . ionoy просил идею, о том как записать объявление типов наиболее лаконично.


H>В Nemerle, емнип, есть синтаксис для свойств из коробки.

Не помню такого. Пример можно?
Re[2]: Макрос для создания DTO типов
От: ionoy Эстония www.ammyui.com
Дата: 01.06.14 09:39
Оценка:
_>Можно как то так:
_>[nemerle]
_>[Dto( Name, Priority : string, IsDone : bool)] class Task {}

_>//[] — свойства

_>//+ — мутабельные

_>[Dto( [Name] = "X", Priority : string, +IsDone : bool)] class Task {}



Это уже какой-то язык в языке получается. Имхо слишком сложно для такой просто задачи.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[3]: Макрос для создания DTO типов
От: Аноним  
Дата: 01.06.14 09:54
Оценка:
Здравствуйте, ionoy, Вы писали:

_>>Можно как то так:

_>>[nemerle]
_>>[Dto( Name, Priority : string, IsDone : bool)] class Task {}

_>>//[] — свойства

_>>//+ — мутабельные

_>>[Dto( [Name] = "X", Priority : string, +IsDone : bool)] class Task {}



I>Это уже какой-то язык в языке получается. Имхо слишком сложно для такой просто задачи.


Наоборот нормально.

вспомним regexp
тоже язык в языке.
Re[4]: Макрос для создания DTO типов
От: ionoy Эстония www.ammyui.com
Дата: 01.06.14 10:19
Оценка:
Здравствуйте, Аноним, Вы писали:

I>>Это уже какой-то язык в языке получается. Имхо слишком сложно для такой просто задачи.


А>Наоборот нормально.


А>вспомним regexp

А>тоже язык в языке.

Ну так и задачу он решает несравнимо более сложную.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[5]: Макрос для создания DTO типов
От: Аноним  
Дата: 01.06.14 10:21
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Ну так и задачу он решает несравнимо более сложную.


Никто не знает на сколько он вырастет
Re: Макрос для создания DTO типов
От: _NN_ www.nemerleweb.com
Дата: 04.06.14 08:00
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Начали писать серию статей по NemerleWeb, и там понадобился макрос, который сделал бы объявление типов более лаконичными.


Как показала практика такой макрос не выходит написать в рамках системы Nemerle.
Дело в том, что порядок макросов не определен, а значит один макрос увидит приватное поле, а другой может увидеть публичное и будет работать не так как надо.

Есть идеи ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Макрос для создания DTO типов
От: Аноним  
Дата: 04.06.14 10:16
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, ionoy, Вы писали:


I>>Начали писать серию статей по NemerleWeb, и там понадобился макрос, который сделал бы объявление типов более лаконичными.


_NN>Как показала практика такой макрос не выходит написать в рамках системы Nemerle.

_NN>Дело в том, что порядок макросов не определен, а значит один макрос увидит приватное поле, а другой может увидеть публичное и будет работать не так как надо.

_NN>Есть идеи ?


Делать один макрос.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.