- Milyen billentyűzetet vegyek?
- Vezetékes FÜLhallgatók
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Gaming notebook topik
- 5.1, 7.1 és gamer fejhallgatók
- HiFi műszaki szemmel - sztereó hangrendszerek
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- OLED TV topic
- RAM topik
-
PROHARDVER!
Új hozzászólás Aktív témák
-
akrobet
tag
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ő
-
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 MatchAllif (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
-
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
● olvasd el a téma összefoglalót!
- RC modell földön, vízen, levegőben
- Milyen billentyűzetet vegyek?
- GOG.com - Good Old Games
- Autós topik
- Vezetékes FÜLhallgatók
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Gumi és felni topik
- Gaming notebook topik
- Nem darabolták fel a Google-t, a sztratoszférába repült a részvény
- NFL és amerikai futball topik - Spoiler veszély!
- További aktív témák...
- Bomba ár! Dell Latitude 7370 - Intel Core m7 I 8GB I 256GB SSD I 13,3" FHD I Cam I W10 I Garancia!
- Gamer PC-Számítógép! Csere-Beszámítás! I7 6700K / RTX 2060 6GB / 32GB DDR4 / 500 SSD
- BESZÁMÍTÁS! Asus ROG STRIX G17 G713IM 17 notebook - R7 4800H 16GB DDR4 512GB SSD RTX 3060 6GB WIN10
- Medion Erazer Beast X40-hez vízhűtés (MD 60961)
- AKCIÓ! Intel Core i9 14900K 24 mag 32 szál processzor garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest