MR. Dev

Blog programistyczny.

PictOgr - widok konfiguracji + model domeny

Ważnym elementem PictOgr-a jest konfiguracja, w niej właśnie będzie definiowana struktura katalogów dla zdjęć. Nazwy powinny składać się z wielu modułów. W tym celu konfiguracja powinna dać możliwość składania wzorca lokalizacji pliku z dostępnych modułów nazwy jakie można wyciągnąć z pliku:

  • EXIF - Exchangeable Image FIle Format - bogactwo możliwości definicji nazw,
  • czasy utworzenia,
  • nazwa pliku,
  • podstawowe znaki jak: -, _, / i inne jakie dojdą w trakcie.

Widok konfiguracji

Widok dość prosty, zawiera zakładkę „Formats”, w której to będzie posortowana według kolejności dodawania lista modułów nazw z lewej strony natomiast z prawej pogrupowane moduły nazw z jakich będzie można zdefiniować nazwę i lokalizację pliku.

Zdefiniowany wzorzec nazwy będzie wyświetlany na dole wraz z przykładową przetworzoną ścieżką do pliku.

Widok nie zawiera możliwości zapisu/odczytu zdefiniowanego wzorca nazwy, to będzie rozbudowane w kolejnych etapach budowy aplikacji.

Widok konfiguracji

Dodatkowo aplikacja będzie posiadała dziennik zadań, w którym to będzie można określić kiedy i o której godzinie ma zostać wykonana procedura porządkowania plików. Widok konfiguracji nie został przygotowany dlatego na tą chwilę będzie pominięty.

Podstawowa konfiguracja jaką będzie można ustawić to start aplikacji z systemem -> Tray oraz integracja z menu podręcznym tak by była możliwość uruchomienia porządkowania np. bezpośrednio na katalogu.

Rozbudowa modelu domeny

Każdy moduł będzie posiadał swój typ, do tego wykorzystany został typ wyliczeniowy , obecnie zawiera dwie pozycje dla EXIFa i bazowych modułów nazw.

Enumeracja listy typów modułów nazw.

namespace PictOgr.Core.Domain
{
	public enum ModuleType
	{
		Base = 0,
		EXIF = 1
	}
}

Typ modułu wykorzystywany jest przez model nazwy: NameModule.

Model składa się także z identyfikatora w formacie GUID, oraz nazwy.

I to właśnie nazwa będzie odzwierciedlać moduł i następnie zostanie zastąpiona rzeczywistymi danymi pobranymi z pliku.

Model nazwy modułu.

using System;

namespace PictOgr.Core.Domain
{
	public class NameModule
	{
		public ModuleType ModuleType { get; private set; }
		public string Name { get; private set; }
		public Guid NameModuleId { get; private set; }

		public NameModule(string name, Guid nameModuleId, ModuleType moduleType)
		{
			SetModuleType(moduleType);
			SetName(name);
			SetModuleId(nameModuleId);

			ModuleType = moduleType;
			Name = name;
			NameModuleId = nameModuleId;
		}

		private void SetModuleId(Guid nameModuleId)
		{
			NameModuleId = nameModuleId;
		}

		private void SetName(string name)
		{
			if (string.IsNullOrWhiteSpace(name))
			{
				throw new Exception("Name must be set.");
			}

			Name = name;
		}

		private void SetModuleType(ModuleType moduleType)
		{
			ModuleType = moduleType;
		}
	}
}

Jest to model domenowy dlatego jego ustawienie możliwe jest jedynie w konstruktorze z wykorzystaniem metod zawierających walidację.

Tak utworzony obiekt nie będzie zmieniany w trakcie działania aplikacji.

DTO modułu nazwy.

using System;
using PictOgr.Core.Domain;

namespace PictOgr.Infrastructure.DTO
{
	public class NameModuleDto
	{
		public ModuleType ModuleType { get; set; }
		public string Name { get; set; }
		public Guid NameModuleId { get; set; }
	}
}

Widok konfiguracji Klasa odpowiedzialna za przekazywanie danych z modelu domeny do aplikacji wygląda bardzo prosto i zawiera w zasadzie te same pola jakie znajdują się w domenie. W tym przypadku mogą ulegać modyfikacji.

Moduły nazwy są wykorzystywane przez następny model domeny o nazwie CompositionName, zawiera on w sobie listę modułów nazw i identyfikator.

Model skomponowanego wzorca nazwy.

using System;
using System.Collections.Generic;

namespace PictOgr.Core.Domain
{
	public class CompositionName
	{
		public List<NameModule> NameModuoles { get; }
		public Guid CompositionId { get; private set; }

		public CompositionName(Guid compositionId)
		{
			NameModuoles = new List<NameModule>();
			SetCompositionId(compositionId);
		}

		private void SetCompositionId(Guid compositionId)
		{
			CompositionId = compositionId;
		}
	}
}

Także w tym przypadku model domeny ma swojego odpowiednika w warstwie infrastruktury o nazwie CompositionNameDto.

DTO kompozycji nazwy.

using System;
using System.Collections.Generic;

namespace PictOgr.Infrastructure.DTO
{
	public class CompositionNameDto
	{
		public List<NameModuleDto> NameModuoles { get; set; }
		public Guid CompositionId { get; set; }
	}
}

DTO dla kompozycji nazwy jest bardzo proste i zawiera jedynie listę nazw modułów, oraz identyfikator kompozycji.

Widok konfiguracji

Czy to dobra czy nie dobra implementacja problemu, to już zostanę rozliczony przez historię:D. Jednak walczę nadal i pozostał tylko jeden post wymagany do ukończenia DSP2017. Tak że widzę światełko w tunelu oraz perspektywy na dalsze blogowanie i rozwijanie PictOgra.

Dziękuję za wytrwałość i zachęcam do komentowania.


Daj Się Poznać 2017

Jest to post przygotowany na potrzeby konkursu „Daj Się Poznać 2017” organizowanym przez Macieja Aniserowicza.

Blog http://mrdev.pl
Projekt http://mrdev.pl/pictogr-pomysl
GitHub github.com/krzysztofowsiany/pictogr
Snapchat www.snapchat.com/add/gocom7
Facebook www.facebook.com/PictOgr-1729700930654225
Twitter twitter.com/gemu_gocom
RSS http://godev.gemustudio.com/category/daj-sie-poznac-2017/feed