Форум Сообщества Аналитиков

×


Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Виталий И

Страницы: 1
1
Вопрос, вероятно, по стилю оформления диаграммы.
Что если...

===
@startuml
class BaseViewModel {
  + event PropertyChangedEventHandler PropertyChanged
  # virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
  # virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
}

class MainViewModel {
  + MainViewModel()
}

class Entity1ViewModel {
  + Main(args: string[]): void
}

class Entity2ViewModel {
  + Main(args: string[]): void
}

class Entity3ViewModel {
  + Main(args: string[]): void
}


 BaseViewModel <|-- MainViewModel
 BaseViewModel <|-- Entity1ViewModel
 BaseViewModel <|-- Entity2ViewModel
 BaseViewModel <|-- Entity3ViewModel

 Entity1ViewModel "_entity1ViewModel" <-- MainViewModel
 Entity2ViewModel "_entity2ViewModel" <-- MainViewModel
 Entity3ViewModel "_entity3ViewModel" <-- MainViewModel
@enduml
===




Я плохо владею навыком построения диаграмм.

Я хотел бы получить что-нибудь в духе такого (см. картинку)

Ожидаемое оформление:
     - классы располагаются слево-направо;
    - соединительные лини перпендикулярные.

Только не знаю как правильно разместить базовый класс.
Хотел бы базовый класс вынести вверх или вниз...
Т.к. вправо предполагаются размести ь ещё классы.


2
Как правильно структурировать диаграмму классов в PlantUml?
Пробую построить диаграмму классов в PlantUml, получаю кашу.


```cs
class MainViewModdel : BaseViewModdel
{
    Entity1ViewModdel _entity1ViewModdel;
    Entity2ViewModdel _entity2ViewModdel;
    Entity3ViewModdel _entity3ViewModdel;
   
    public MainViewModdel()
    {
        _entity1ViewModdel = new Entity1ViewModdel();
        _entity2ViewModdel = new Entity2ViewModdel();
        _entity3ViewModdel = new Entity3ViewModdel();
    }
}

class Entity1ViewModdel : BaseViewModdel
{
    + Main(args: string[]): void
}

class Entity2ViewModdel : BaseViewModdel
{
    + Main(args: string[]): void
}

class Entity3ViewModdel : BaseViewModdel
{
    + Main(args: string[]): void
}
```

```cs
internal abstract class BaseViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
    {
        // Код...           
    }

    protected virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
    {
        // Код...           
    }     
   
}
```

# uml
```puml
skinparam linetype ortho
left to right direction



class BaseViewModel {
  + event PropertyChangedEventHandler PropertyChanged;
  # virtual void OnPropertyChanged([CallerMemberName] string PropertyName = null)
  # virtual bool Set<T>(ref T field, T value, [CallerMemberName] string PropertyName = null)
}

class MainViewModel {
  - _entity1ViewModel : Entity1ViewModel
  - _entity2ViewModel : Entity2ViewModel
  - _entity3ViewModel : Entity3ViewModel
  + MainViewModel()
}

class Entity1ViewModel {
  + Main(args: string[]): void
}

class Entity2ViewModel {
  + Main(args: string[]): void
}

class Entity3ViewModel {
  + Main(args: string[]): void
}


 BaseViewModel <|-- MainViewModel
 BaseViewModel <|-- Entity1ViewModel
 BaseViewModel <|-- Entity2ViewModel
 BaseViewModel <|-- Entity3ViewModel

MainViewModel --> Entity1ViewModel
MainViewModel --> Entity2ViewModel
MainViewModel --> Entity3ViewModel
```

3
Как правильно нарисовать диаграмму классов?


Диаграмма в онлайн редакторе: https://www.plantuml.com/plantuml/uml/VP71IWCn443l-OevjaZx0KMaseC85Znu4m_3PimEpKxAP5PPr7ytYsPT3sikERoyUJ3PPqErleikdrZEgDX1P24RpWH9hKtEDH5pXWTDOQJl3igvW2Eoh513ta4sPGbFp-iTl2RsxhCwnoGqt61pcgnRiWEgVopZL-jgpfYIPxldZct4BFRBhaLwZ8UsDAd2KdBb9dt1Xk3kMny39RYSMuxzdvhFlzpuz2QRQIr_uSSFdHRWwhkjScXjUpL3Un9VVk0B


**Код**
**Program**
```cs
class Program
{
    static void Main(string[] args)
    { 
        ICreditCard creditCard = new MoneyBack();
        Console.WriteLine("CardType : "    + cardDetails.GetCardType());
        Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
        Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
    }
}
```


**ICreditCard**
```cs
public interface ICreditCard
{
    string GetCardType();
    int GetCreditLimit();
    int GetAnnualCharge();
}

```

**MoneyBack**
```cs
public class MoneyBack : ICreditCard
{
    public string GetCardType()
    {
        return "MoneyBack";
    }
    public int GetCreditLimit()
    {
        return 15000;
    }
    public int GetAnnualCharge()
    {
        return 500;
    }
}
```



Solut-1 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---



```puml
@startuml
skinparam linetype ortho

class Program {
    + Main(args: string[]): void
}

class MoneyBack {
    + GetCardType(): string
    + GetCreditLimit(): int
    + GetAnnualCharge(): int
}


interface ICreditCard {
  + GetCardType(): string
  + GetCreditLimit(): int
  + GetAnnualCharge(): int
}

ICreditCard <-down- Program
ICreditCard <|-down- MoneyBack
Program .right.> MoneyBack
@enduml
```

Solut-2 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---


```puml
@startuml
class Program {
    static void Main(string[] args)
}

interface ICreditCard {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

class MoneyBack {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

Program -right-|> ICreditCard
ICreditCard <|.. MoneyBack
@enduml
```



Solut-3 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---


```puml
@startuml
left to right direction

class Program {
    static void Main(string[] args)
}

interface ICreditCard {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

class MoneyBack {
    string GetCardType()
    int GetCreditLimit()
    int GetAnnualCharge()
}

Program --|> ICreditCard
ICreditCard <|.. MoneyBack
@enduml
```

Solut-4 --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

4
Как генерировать диаграмму последовательностей из существующего проекта?


Я попробовал разобраться с документацией.
Я построил диаграмму последовательностей.
Я получаю


Это всё?
(Полное изображение: https://i.ibb.co/Cvj0SHG/image.png)


Мои ожидания: увидеть на диаграмме детальную работу метода **Worker()** класса **ParserWorker**
Путь: Node_Root.Package1.Parser.Core.ParserWorker


Проект:
Папка:  c:\ProjectTest\5214\ParserExtrem\Project\
Github: https://github.com/jhon65496/ParserSequenceDiagrams



Использую:
Sparx Systems Enterprise Architect -15.2

Класс: ParserWorker;
Метод: Worker();
private async void Worker()
{
    for(int i = parserSettings.StartPoint; i <= parserSettings.EndPoint; i++)
    {
        if (!isActive)
        {
            OnCompleted?.Invoke(this);
            return;
        }

        var source = await loader.GetSourceByPageId(i);
        var domParser = new HtmlParser();

        var document = await domParser.ParseAsync(source);

        var result = parser.Parse(document);

        OnNewData?.Invoke(this, result);
    }

    OnCompleted?.Invoke(this);
    isActive = false;
}



Процесс построения диаграммы









































Step-1


Step-2


Step-3








Result





Страницы: 1