Archive for the ‘Design’ Category

ViewModelek kérdésköre

Wednesday, March 3rd, 2010

Mostanában oktatok és prototípust írok, közben ezer design kérdést tisztázok a fejemben. Az egyik ilyen pl., hogy a ViewModel DependencyProperty vagy INotifyPropertyChanged módon közvetítse a változásokat a GUI-ra?
Én az INotifyPropertyChanged-re szavaznék, mert így a ViewModel és nem függ a GUI technológiától, eleve nekem fura a modellben pl. WPF fogalmakat látni.

Infók a kérdéskörben.

Általános áttekintés:
INotifyPropertyChanged vs. DependencyProperty in ViewModel

Egy POCO szavazat:
View Models: POCOs versus DependencyObjects

Én Expressionnel oldom meg, hogy ne legyenek property name stringek a kódban, ő nem, de az objektum pool ötlet tetszik benne, átveszem, de szemeteljünk.
A base class which implements INotifyPropertyChanged

Nagyon dicsérik a videót, még nem volt időm megnézni.
Jason Dolinger on Model-View-ViewModel

Jó kép az MVVM rétegekről.

Egyféle Validation megközelítés.
Using a ViewModel to Provide Meaningful Validation Error Messages

Enterprise Modeling Anti-Patterns

Monday, February 1st, 2010

Link.

Most tervezek egy cégnek egy nagyobb architektúrát, és közben próbálom szem előtt tartani ezt a listát, könnyű beleesni a benne szereplő hibákba.

Hacktivity előadásom

Tuesday, September 15th, 2009

Hétvégén lesz a Hacktivity konferencia, ahol NEM arról fogok beszélni, ami ki van írva.
Gál Tamással ketten kaptunk 45 percet, amiben GT a VPN Windows7/R2 új alternatíváiról beszél, én pedig arról, hogy egy akkora cég, mint az MS hogyan képes felzárkózni a hekkerek generálta biztonsági kihíváshoz. Az előadásom fele érdekességekkel, történetekkel lesz tele, belső infók, mit tesz az ms a jobb kódminőség érdekében, a másik felében pedig konkrét példákat mutatok be, amelyek demonstrálják, hogy a különböző támadási típusok esetén (privilege escalation, stb.) hogyan zárkóztak fel a termékek, mint a Windowsok vagy az IIS.
Szeretettel várok mindenkit, aki ráér hétvégén hekkerkedni.

Előadásom az Architect Akadémián - SQL Server architect szemmel

Sunday, April 12th, 2009

Kicsit későn szólok, de ha valakit érdekel, még jelentkezhet, április 15-én lesz.
3×1 órában beszélek arról, hogyan lehet bevetni az SQL Serverek (2000-2008) okosságait egy új alkalmazásarchitektúra kidolgozása során. A cél nem annyira mélységi, mint szélességi bemutatása annak, mit lehet kihozni az SQL Serverből. Igyekszek olyan dolgokról is beszélni, amiről ritkán esik szó (pl. Query Notification, Service Broker), világnézet tágítás végett. Szeretném megmutatni, hogy az SQL Server nem egy egyszerű CRUD adatbázismotor, ahogy sajnos nagyon sokan használják.

Design Patterns tanfolyam - újra, kibővítve .NET 3.5-tel

Thursday, February 12th, 2009

Marcival újra összeállunk pár akcióra, ennek első megnyilvánulása, hogy újra lesz Design Patterns tanfolyam.
Már írom át az anyagot, a 3.5-ös .NET Fw. tele van szebbnél-szebb design példákkal, illetve az utóbbi 2 év gyakorlati programozása során jó pár dolog tovább formálódott, tisztult a fejemben, ezeket is beépítem az anyagba.

A referenciáim között megtekinthető, hogy volt, amikor cégek szinte összes programozója részt vett a tanfolyamon, felismerve a dolog hasznát a fejlesztési folyamatok minőségére.

És végül, aki bemásolja a következő kódot a jelentkezési lapjára, 20% kedvezményt kap a tanfolyam árából:


public class DP: Course, ISupportDiscount
{
    public HappyStudent GiveMeThisDirtyGoodCourseCheaply() { }
    public string Author { get { return "soci"; } }
    public string Trainer { get { return "soci"; } }
    public DateTime ActionTime { get { return DateTime.Parse("2009.03.09"); } }
}

Szeretettel várok mindenkit.

Amikor egy metódus nem a helyén lakik

Tuesday, January 20th, 2009

Az utóbbi pár hétben rendkívül intenzíven egy programot írok - egy Automated Trading System-et, így mondják ezeket angolul. Azaz egy olyan programot, amely real-time tőzsdei adatok alapján automatikusan döntéseket hoz, ad-vesz. Persze a dolog a valóságban elképesztően bonyolult tud lenni, de programozási gyakorlatnak mindenképpen érdekes.

A rendszer részleteiről egyelőre nem akarok írni, majd ha működik, beszélek róla - bár lehet, hogy pont akkor nem kellene, mi? :)

No, a lényeg, hogy az ilyen rendszereket az ember csak akkor indít el, ha nagyon hosszú múltbeli adatokon végigpróbálva elég jó a nyereség/veszteség aránya, és nem csinál zsinórban annyi veszteséget, ami már pszichológialiag fáj, vagy akár le is nullázza az erre szánt pénzt.
Ezt a tesztelést hívják backtest-nek. Ehhez adatok kellenek, amit persze pénzért adnak, de ez már csak ilyen, ha ez ember pénzt akar keresni, ahhoz be is kell fektetni.
Nekem most már van több mint 10 évnyi perces adatom a legnagyobb likviditású futures-ökhöz (S&P 500 E-Mini, Nasdaq E-Mini, stb.).
Jöhet a szakma. A backtest írásakor kialakult a következő kódrészlet:


class BackTestSession
{
...
  for (int i = 0; i < bars.Count; i++)
  {
    foreach (TradingAlgorithm alg in algs)
    {
       StepOne(alg, i);
    }
  }

private void StepOne(TradingAlgorithm alg, int i)
{
    if (!alg.InLong && !alg.InShort)
    {
        decimal entryPrice;
        TradeActionReason reason = alg.WantToBuyLong(i, out entryPrice);
        if (reason != TradeActionReason.None)
        {
            return;
        }

        reason = alg.WantToSellShort(i, out entryPrice);
        if (reason != TradeActionReason.None)
        {
            return;
        }
        return;
    }

    if (alg.InLong)
    {
        TradeActionReason reason = alg.WantToSellLong(i);
        if (reason != TradeActionReason.None)
        {
            return;
        }
    }

    if (alg.InShort)
    {
        TradeActionReason reason = alg.WantToCoverShort(i);
        if (reason != TradeActionReason.None)
        {
            return;
        }
    }
    return;
}
...
}

Ez a kód messziről bűzlik. Mi a gond vele? Nem jó helyen lakik. Figyeljük meg, hogy egyfolytában egy másik típuson (TradingAlgorithm) végez műveleteket, átnyúlkál oda adatokért és műveleteket végezve rajta.
Ez egy code smell a refactoringok házatáján, amire megoldás, ha elköltöztetjük a metódust a helyére. Move method refactoring.


class BackTestSession
{
  for (int i = 0; i < bars.Count; i++)
  {
      foreach (TradingAlgorithm alg in algs)
      {
          alg.StepOne(i);
      }
  }
}

class TradingAlgorithm
{
    public void StepOne(int i)
    {
        if (!InLong && !InShort)
        {
            decimal entryPrice;
            TradeActionReason reason = WantToBuyLong(i, out entryPrice);
            if (reason != TradeActionReason.None)
            {
                return;
            }

            reason = WantToSellShort(i, out entryPrice);
            if (reason != TradeActionReason.None)
            {
                return;
            }
            return;
        }

        if (InLong)
        {
            TradeActionReason reason = WantToSellLong(i);
            if (reason != TradeActionReason.None)
            {
                return;
            }
        }

        if (InShort)
        {
            TradeActionReason reason = WantToCoverShort(i);
            if (reason != TradeActionReason.None)
            {
                return;
            }
        }
        return;
    }
}

Látható a különbség? Sokkal direktebb lett a kód, oda került a metódus, ahová való. Erről szól az első GRASP pattern, az Information Expert.

Következő refactoring lenne az out paraméterek kiirtása, lecserélése member változóra. Erre még a VS is ad refactoring támogatást.

És most jön a shameless plug (bár nem ezért kezdem el írni a cikket, de ki nem hagynám a lehetőséget :): A Netacademiában márciusban lesz újra Design Patterns tanfolyamom, ahol az objektumorientált programozás praktikáit mutatom meg 4 napban, ilyen egyszerűeket mint a fenti, és sokkal bonyolultabbakat is. A régi tananyagot átírom a következő hetekben, kiegészítve .NET Fw. 3.5-ös példákkal (WCF-ben és WPF-ben nagyon szép példákat látni a patternekre).

Szaktanácsadó születik :-)

Tuesday, October 14th, 2008

Örömmel és nagy reményekkel közzéteszem, hogy 2009. január 1.-től független szaktanácsadóként folytatom a szakmai pályafutásom. Ennek megfelelően év végére átalakítom a website-om főlapját is, a megfelelő üzleti, kontakt, stb. információkkal kiegészítve.
A blogom változatlanul fog üzemelni, sőt, várhatóan több időm lesz rá, és jóval több témával is fogok foglalkozni (WCF, WWF, Windows Internals, DP újult erővel, stb.).

Ha .NET-alapú fejlesztéssel, tervezéssel vagy SQL Serverrel kapcsolatban tudok valakinek segíteni, januártól szabad vagyok. Az utóbbi két évben jó pár felkérést utasítottam vissza, jövőre erre már nem lesz szükség.

Részletek később, most igen sok intéznivalóm van…

Monorail is cool?

Wednesday, August 8th, 2007

Legalábbis ő azt mondja. Én még nem ismerem, de amint lesz egy kis időm, innen kiindulva tanulmányozom. Amúgy egy ASP.NET-re épülő frameworkről van szó, bár nekem elsőre rubynak tűnt - a neve miatt.

Supervising Controller pattern

Tuesday, April 24th, 2007

Architektúra kedvelőknek egy jó kis cikk a Supervising Controller pattern használatáról ASP.NET-ben.

User interface description for ASP.NET és WinForms

Thursday, March 22nd, 2007

Kiírom, hátha van valakinek jó ötlete, vagy akár csinált már ilyet.
A feladat, hogy viszonylag egyszerű, form alapú, adatbázis hátterű appokat (ez ugye az enterspájz dev) akarnak írni. A UI-t mindenképpen csak egyszer akarják leírni, valamilyen metanyelven, amelyből egy-egy keretrendszer asp.net WebForms és Winforms kimenetet készít. Nem feltétlen előfordítással, hanem akár azonnali értelmezéssel.
Nem csak a GUI-t kell leírni, de egyszerűbb logikát is kell támogatni. Pl. ha nincs valami kitöltve, akkor egy másik control csoport disabled legyen, stb.

Vannak GUI leírók, mint a XUL vagy a XFDL, esetleg XAML.
Az egész cuccnak menni kell w2k-n, így fw. 2.0 a max, amit lehet használni. Jó lenne, ha a meglévő nyelvet kibővítve a hozzá kapcsolódó esetlegesen létező designer programot is ki lehetne bővíteni az új nyelvtannak megfelelően.

Van valakinek ötlete, netán tapasztalata a témában? Szívesen beszélgetnék róla kicsit.

Design Pattern tanfolyam - last call

Wednesday, July 12th, 2006

Könnyen lehet, hogy az utolsó DP tanfolyamom lesz a jövő héten, aki még szeretne csatlakozni, még 1 napig megteheti.

Érdekes cikk az MVP Patternről - ASP.NET design

Wednesday, July 12th, 2006

Egy pár napja megjelent cikk a codeprojecten (verhetetlen ez a site). Arról beszél, hogy az MVP (Model-View-Presenter) Patternnel hogyan lehet kiemelni és tesztelhetővé tenni az üzleti logikát egy weblapból. Nagyon jó cikk.

Emellett a cikk tele van érdekes linkekkel, amiket betárazok ide magamnak is későbbi olvasásra:

MVC vs. MVP

Dependency Injection for Loose Coupling

Model View Presenter Fowler bátyótól

NHibernate Best Practices with ASP.NET, Generics, and Unit Tests

Castle

PageMethods

Design by Contract Framework

Update: első link javítva, köszi gubus.