Hirdetés
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- „Új mérce az Android világában” – Kezünkben a Vivo X300 és X300 Pro
- Yettel topik
- Samsung Galaxy S22 és S22+ - a kis vagány meg a bátyja
- iPhone topik
- Honor Magic V3 - mágikus realizmus
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Android alkalmazások - szoftver kibeszélő topik
- Xiaomi: Android 16 zápor, zivatar
-
Mobilarena

Ú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!
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Büszke apukák és anyukák topikja
- Bittorrent topik
- Hővezető paszták
- Építő/felújító topik
- sh4d0w: Kalózkodás. Kalózkodás?
- Villanyszerelés
- „Új mérce az Android világában” – Kezünkben a Vivo X300 és X300 Pro
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Torrent meghívó kunyeráló
- További aktív témák...
- LG 50QNED85T3A / QNED / 50" - 127 cm / 4K UHD / 120Hz / HDR Dolby Vision / FreeSync Premium / VRR
- Samsung Galaxy Watch 6 Classic 47mm, 1 Év Garanciával
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RTX 5060Ti 16GB GAMER PC termékbeszámítással
- Új Lenovo E14 Thinkpad WUXGA IPS Ryzen7 7730U 16GB 512GB SSD Radeon RX Vega8 Win11 Pro Garancia
- BESZÁMÍTÁS! ASUS H510M i5 10400F 16GB DDR4 512GB SSD RTX 2080 Super 8GB Zalman T4 PLUS FSP 700W
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


É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.


