Keresés

Új hozzászólás Aktív témák

  • akrobet

    tag

    válasz lezso6 #9896 üzenetére

    Egy teljes 180 fokos fordulat SQL-ről No-Sql-re tényleg nem valószínű, de egy hibrid megoldás sokkat inkább, pl. egy gráf alapú adatbázis mint a Neo4J az applikáció azon részére, ahol az SQL join már nem járható út (és nem szeretnéd agyon-normalizálni a tábláidat és duplikálni az adatot). És akkor szerintem jobban fogok örülni, hogy a bonyolult model struktúra és logic amit le akarok cserélni nem SQL-ben van, hanem CSharpban.

    De lehet, hogy ez csak egy egyedi eset nálunk és senki másnál ilyen nem fordult még elő :U

  • akrobet

    tag

    válasz martonx #9888 üzenetére

    Akkor let's agree to disagree :) Értem én hogy sql-ben érdemes olyan részeit az alkalmazásnak átírni ami a legtöbbet használt és EF nem képes rá megfelelően gyorsan futó query-ket generálni.

    De mit csinálsz ha váltani kell egy másik providerre, neaggyisten valamilyen no-sql megoldásra?

    Nem lehetetlen SQL-ben megírt kódot tesztelni, karbantartani, csak nagyon hamar el fog menni tőle a kedved, ha egy olyan business model-ed van, ami kb 300 egyedi entitásból áll 15+ level mélységű relationokkel...

  • akrobet

    tag

    @martonx: ahol most dolgozunk (egy bonyolult logisztikai rendszer) bármilyen business logic SQL-ben való megírása teljes no-go, mert szinte lehetetlen karbantartani, tesztelni, stb.
    amikor netán valami elcseszett adatotra kell SQL-ben scriptet írnom, az egy kész kínzás .NET kódhoz képest ahol kb. az 1/50-e idő alatt megírom azt amit akarok, linq-el, entity framework-kel.

    "pl. raktam már össze repülőjegy árazó engine-t, aminek kellemesen bonyolult sok dimenziós mátrixokból kellett dolgoznia" - és mi a helyzet a kód olvashatóságával, netán ha valaki másnak kellene átvennie és folytatnia a munkát?

    Számomra az is fura olvasni olyan érvelést, hogy valamit milyen kevés sor kódból lehet megírni..
    Megintcsak, szerintem sokkal fontosabb, hogy a kód gyorsan olvasható és értelmezhető legyen ahelyett, hogy össze legyen tömörítve 5 sorba és kb 1 órába teljen valakinek aki először látja, hogy megértse.

  • akrobet

    tag

    válasz bambano #9871 üzenetére

    Bár látom a fantáziát abban amit mondasz "igazi" C# programozó vagyok, és a feladatban is bennevan:

    "Where possible you should provide a working solution written in c# i.e. it should compile without needing to add dependencies manually."

    Továbbá a kiindulási helyzet is az, hogy már adott a rendszer többi része, tehát valószínűleg késő lenne egy új programozási nyelvet "feltalálni" és az adatbáziskezelőt lecserélni.

    "bele is fogsz fulladni és soha nem lesz kész" - szerintem bármilyen megoldást is választ az ember, soha nem lesz kész, mivel a feladatban is benne van, hogy a szabályok folyamatosan változnak.

    Namármost, ha én olyan szinten lennék (de nem vagyok) hogy írjak egy új nyelvet, amiben ezeket a szabályokat kellene írni, attól még nem szűnne meg a szükség a maintenance-re és nem hiszem hogy egy felhasználóra lehetne hárítani a feladatot. Az elég rizikós vállalkozás lenne.

  • akrobet

    tag

    válasz dabadab #9870 üzenetére

    Értem, csak egy kicsit bizonytalan vagyok a scripttel kapcsolatban, hogy hogy működne az a praxisban, mivel még soha nem csináltam ilyet.

    Valahogy dinamikusan betölteni text file-ból a c# kódot?

    Továbbá, ha változik a method definició (név, paraméterek..) akkor a scripteket elég manuális lenne "utánnaigazítani", míg ha a kettő egy solution-ban van, egy sima refactor elég, és ugye typesafe az egész.

    A business logicot és az implementációs részleteket azért szerintem el lehetne különíteni egymástól, ha azt vesszük ami a scriptben van is implementációs részlet, mert ugye C# és nem egy DSL.

  • akrobet

    tag

    válasz dabadab #9866 üzenetére

    Több rulet össze lehetne vonni egy BusinessRuleSet -be

    IEnumerable<BusinessRule> Rules
    bool MatchAll

    if (Rules.Any()) {...}

    vagy

    if (Rules.All()) {...}

    A scriptnek mi lenne az előnye hardcode-dal szemben azon kívül hogy nem kell a változtatásához egy release? Mert azt csak programozók tudnák úgy is megírni.

  • akrobet

    tag

    válasz dabadab #9863 üzenetére

    Hogy lehetetlen jól megoldani, gondolom arra érted, hogy nincs elég információ a rendszer felhasználási mintájáról, adatforgalomról, fejlesztésre rendelkezésre álló időről stb...

    Ja, amúgy azt is írják a feladatban, hogy ha a designnak az implementálása túl sok programozást igényelne (több mint 2 óra), akkor elég ha elmagyarázom ami nincs implementálva. -- haha, 2 óra, viccesek mi. És ez unit testtel, működöképesen, bezippelve :)

    A gond ott van, hogy a rendszer achitektúrájáról nem tudok semmit, viszont már adott: "The module will be used within an existing system".

    Úgyhogy nekem csak az order-processing module részre, azon belül is a business rules-ra kellene koncentrálnom. Ez ugye elég nehéz a rendszer többi részét nem ismerve. De gondolom ez is a teszt része, hogy ki milyen megoldást választ..

    Tudnád ezt a scriptelt döntéshozó részt jobban elmagyarázni? Mi lenne konkrétan a scriptben? Valami expression tree szerű megoldás serializálva..?

    Én egy BusinessRule objektumra gondoltam ami valahogy így nézne ki:

    public BusinessRuleEvaluationResult Apply(EntityBase entity)
    {
    var evaluationResult = new BusinessRuleEvaluationResult();

    var actualValue = RelationPropertyValueResolver.GetPropValue(entity, PropertyPath);

    //both null -> match
    if (RulePropertyValue == null && actualValue == null)
    evaluationResult.IsMatch = true;

    //one of them null -> no match
    else if (RulePropertyValue == null || actualValue == null)
    evaluationResult.IsMatch = false;

    //check actual values
    evaluationResult.IsMatch = RulePropertyValue.Equals(actualValue);

    //exectue action
    if (evaluationResult.IsMatch)
    {
    var actionTarget = RelationPropertyValueResolver.GetPropValue(entity, ActionEntityPath);
    var actionTargetType = actionTarget.GetType();
    var method = actionTargetType.GetMethod(ActionToExecute);
    object actionResult = method.Invoke(actionTarget, null);
    evaluationResult.ActionResult = actionResult;
    }

    return evaluationResult;
    }

    var productBusinessRule = new BusinessRule()
    {
    PropertyPath = "Order.Product.Title",
    RulePropertyValue = "Egri Csillagok",
    ActionEntityPath = "Order",
    ActionToExecute = "GeneratePackageSlip"
    };

    Ez lenne egy rule, amit adatbázisban tárolnék.

  • akrobet

    tag

    Sziasztok!

    Tanácsot szeretnék kérni egy üzleti szabálymotor (business rule engine) megtervezésével kapcsolatban.

    Angol leírás: [link] - szerintem sokkal érthetőbb annak aki tud angolul mint az én alábbi fordításom :)

    A szabálymotor egy rendelés feldolgozó rendszer része lenne, ehhez hasonló funkciókkal:

    - ha egy rendelés érkezik egy fizikai termékért, generáljon egy csomagolási szelvényt (packaging slip) a küldéshez

    - ha egy rendelésérkezik egy könyvért, hozzon létre egy másolatot a csomagolási szelvényről a jogdíj osztály részére

    - ha egy rendelés érkezik egy tagságért, aktiválja a tagságot

    - ha egy rendelés érkezik egy tagság előléptetéséért (upgrade) , érvényesítse az előléptetést (apply the upgrade)

    - ha egy rendelés érkezik a "Síelni tanulunk" nevű filmért, addjon hozzá egy "Elsősegély" nevű videót a csomagolási szelvényhez.

    ...

    A rendszernek ehhez hasonló szabályok százait kell hogy tudja feldolgozni, és a szabályok folyamatosan bővülnek és változnak a rendszer élettartama alatt.

    Tehát a feladat egy olyen rendszer megtervezése ami elég flexibilis hogy kezelni tudja a bonyolult szabályokat, úgy hogy minél kevesebb karbantartást igényeljen a rendszerfejlesztőtől.

    A feladatban előírják, hogy az egyszerűséget előnynek tekintik az rendszer architekturában. Tehát bonyolult design patternek használata nélkül, ha nincs létjogosultsága.

    A kódnak teszelhetőnek és könnyen olvashatónak kell lenni.

    Nah, ez lenne a feladat leírása (fordítása).

    Két megoldás között vacilálok, mivel a feladatban (gondolom direkt) nem utaltak rá, hogy pontosan milyen gyakran változnak ezek a szabályok és hogy a rendszer felhasználói (webshop tulaj) tudjanak-e maguk változtatni / hozzáadni új szabályokat.

    1. megoldás - lényegében hardcodeolni a szabályokat termék típus szerint
    előnyök: nem igényel bonyolult programozási "trükköket" mint reflection, expression trees, stb..
    hátrányok: minden szabályvátloztatás programozót igényel és egy új rendszer verzió beüzemelését (deploy)

    2. megoldás - a szabályok dinamikusan létrehozhatók a felhasználók által, pl definiálva a termék típusát (class name) és paramétereit (property) és a szabályokat adatbázisba menteni, és vizsgálásnál kiolvasni, majd reflectionnel megvizsgálni hogy az adott megrendelés, stb. megfelel-e a szabályoknak és aszerint végrehajtani az utasítást.

    előnyök: rugalmas rendszer, a szabályok létrehozása nem igényel programozót
    hátrányok: bonyolultabb implementáció, nem túl elegáns kód (reflectionnel), ha megváltozik egy utasítás neve a kódban, az adatbázisban tárolt szabályok nem működnek többé

    Én személy szerint a második megoldás felé hajlanék, mert szabályok százainak karbantartása szerintem túl költséges lenne. A problémám csak az hogy sokan írják a reflectionről pl. stackoverflow-n, hogy lassú és nem alkalmazható olyan helyeken ahol utasítások millióit kell végrehajtani.

    Valakinek esetleg lenne ötlete/tapasztalata ilyen rendszer fejlesztésével esetleg a két megoldás közül melyik lenne helytállóbb?

    Programozási nyelv: C#

    Bocsi a hosszú postért, de szerintem szükséges a feladat megérteséhez. Ha furcsa magyar megfogalmazást használok az azért van mert csak angolul tanultam programozást és nem tudom a magyar kifejezéseket.

  • akrobet

    tag

    válasz repvez #8523 üzenetére

    Szerintem kezdetnek ezek a raspberry pi projektek nagyon elég érdekesek, hogy felkeltsék a fiatalabbak érdeklődését és hogy rávezessék őket a programozó gondolkodásmódra.

    http://www.pcadvisor.co.uk/how-to/gadget/3589952/10-great-raspberry-pi-projects-for-kids/

  • akrobet

    tag

    Helló, nem tudom a legmegfelelőbb topic-e, de megpróbálom...

    Van valakinek ötlete hogy termék- /árösszehasonlító oldalak mintpéldául pricespy.co.uk, honnan szerzik a termékleírást, hogy ilyen aprólékosan a termék minden lehetséges paraméterét tudják?

    Különösképp a számítógép komponensek leírása érédekelne, hogy van-e valami fizetős/vagy ingyenes API amin keresztül hozzá lehet jutni, vagy maguk gyűjtötték volna össze ezt a tömérdek információt (valamilyen crawlerrel) vagy netán olcsó munkaerő végzi manuálisan ezt a feladatot?

Új hozzászólás Aktív témák