Dev Tips
Un trucchetto al giorno leva le complicazioni di torno! Piccole "scorciatoie" che possono facilitare la vita degli sviluppatori e far risparmiare tempo...e righe di codice.
Un trucchetto al giorno leva le complicazioni di torno! Piccole "scorciatoie" che possono facilitare la vita degli sviluppatori e far risparmiare tempo...e righe di codice.
2025-03-24
Il segreto di un software scalabile e manutenibile? Separare bene i livelli. Quando la logica di business è mescolata con la UI, il database e altre parti del sistema, tutto diventa confuso: le regole di business sono sparse ovunque, piccole modifiche rischiano di rompere il codice e il progetto diventa difficile da mantenere e scalare. Quando, invece, la logica di business è pulita e isolata, il codice diventa più chiaro e ogni cambiamento meno rischioso. Come questa pratica può salvare il tuo progetto?
1// Infrastructure Layer
2class DatabaseRepository {
3 save(entity: Entity): void { /* Persistence logic */ }
4}
5
6// Domain Layer
7class Order implements Entity {
8 private lineItems: OrderLine[];
9 // Other stuff...
10
11 isEligibleForDiscount(): boolean {
12 // Implementation code
13 }
14
15 applyDiscount(): void {
16 // Implementation code
17 }
18}
19
20// Application Layer
21class OrderService {
22 constructor(private repository: DatabaseRepository) {}
23
24 processOrder(order: Order): void {
25 if (order.isEligibleForDiscount()) {
26 order.applyDiscount();
27 }
28
29 this.repository.save(order);
30 }
31}
2025-02-25
Scrivere codice è facile ma scrivere codice che ha senso è tutta un’altra storia. Creare un buon modello non significa solo scrivere classi e metodi: è un processo di comprensione profonda del dominio che permette di tradurre concetti complessi in codice chiaro e manutenibile. Il Knowledge Crunching è proprio questo: un processo continuo di collaborazione tra sviluppatori ed esperti di dominio, che ci aiuta a perfezionare i modelli del business e a tradurre le complessità del mondo reale in soluzioni software robuste e scalabili. Ecco come dovrebbe essere un blocco di codice con il Knowledge Crunching:
1class Order {
2 private lineItems: OrderLine[] = [];
3 private total: Money;
4 private status = OrderStatus.DRAFT;
5
6 constructor() {
7 this.total = new Money(0, 'EUR');
8 }
9
10 addProduct(product: Product, quantity: Quantity): void {
11 if (this.status === OrderStatus.CONFIRMED) {
12 throw new OrderAlreadyConfirmedError();
13 }
14
15 const lineItem = new OrderLine(product, quantity);
16 this.lineItems = [...this.lineItems, lineItem];
17 this.recalculateTotal();
18 }
19
20 private recalculateTotal(): void {
21 this.total = this.lineItems.reduce(
22 (sum, item) => sum.add(item.calculateSubtotal()),
23 new Money(0, 'EUR')
24 );
25 }
26}
2024-10-23
1// users.mjs
2const res = await fetch('https://jsonplaceholder.typicode.com/users');
3const users = res.json();
4export { users };
5
6//module.mjs
7import {users} from './users.mjs';
8
9console.log(users);
2024-07-22
1// Using requestIdleCallback for scheduling low-priority background tasks
2const idleCallback = () => {
3 // Perform background tasks
4 console.log('Background task executed');
5};
6
7window.requestIdleCallback(idleCallback);
2024-05-15
1.button {
2 border: 0;
3 padding: 10px;
4 box-shadow:
5 -2px -2px 5px gray,
6 2px 2px 5px gray;
7}
8
9@media (forced-colors: active) {
10 .button {
11 /* Use a border instead, since box-shadow is forced to 'none' in forced-colors mode */
12 border: 2px ButtonText solid;
13 }
14}
Hai in mente un progetto e vorresti realizzarlo?
Sei interessato a migliorare le competenze del tuo team in ambito di programmazione e sviluppo?
Oppure vuoi semplicemente prendere prendere un caffè con noi e vedere la nostra collezione di Action Figure, allora scrivici tramite questo form.
Se, invece, vuoi far parte del team, guarda le nostre offerte di lavoro.