5.0 KiB
5.0 KiB
Technology-Specific Examples
This guide provides technology-specific examples for component identification at the C3 level.
Technology-Specific Examples
NestJS Example
Component identification in NestJS backend:
// src/users/user.controller.ts
@Controller('users')
export class UserController { // Component: User Controller (controller)
constructor(private userService: UserService) {}
@Post()
create(@Body() dto: CreateUserDto) {
return this.userService.create(dto);
}
}
// src/users/user.service.ts
@Injectable()
export class UserService { // Component: User Service (service)
constructor(private userRepo: UserRepository) {}
async create(dto: CreateUserDto) {
return this.userRepo.save(dto);
}
}
// src/users/user.repository.ts
@Injectable()
export class UserRepository { // Component: User Repository (repository)
constructor(@InjectRepository(User) private repo: Repository<User>) {}
async save(data: CreateUserDto) {
return this.repo.save(data);
}
}
Components:
- User Controller (controller) - Handles HTTP requests
- User Service (service) - Business logic
- User Repository (repository) - Data access
Patterns:
- Dependency Injection (@Injectable, constructor injection)
- Repository Pattern (UserRepository)
- Layered Architecture (Controller → Service → Repository)
Django Example (Python)
Component identification in Django backend:
# users/views.py
class UserViewSet(viewsets.ModelViewSet): # Component: User ViewSet (controller)
queryset = User.objects.all()
serializer_class = UserSerializer
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
user = UserService.create_user(serializer.validated_data)
return Response(UserSerializer(user).data)
# users/services.py
class UserService: # Component: User Service (service)
@staticmethod
def create_user(data):
# Business logic
user = User.objects.create(**data)
EmailService.send_welcome(user)
return user
# users/models.py
class User(models.Model): # Component: User Model (model)
email = models.EmailField(unique=True)
name = models.CharField(max_length=100)
class Meta:
db_table = 'users'
Components:
- User ViewSet (controller) - Handles HTTP requests
- User Service (service) - Business logic
- User Model (model) - Data model
Spring Boot Example (Java)
Component identification in Spring Boot backend:
// UserController.java
@RestController
@RequestMapping("/users")
public class UserController { // Component: User Controller (controller)
@Autowired
private UserService userService;
@PostMapping
public ResponseEntity<User> createUser(@RequestBody CreateUserDto dto) {
User user = userService.createUser(dto);
return ResponseEntity.ok(user);
}
}
// UserService.java
@Service
public class UserService { // Component: User Service (service)
@Autowired
private UserRepository userRepository;
@Autowired
private EmailService emailService;
public User createUser(CreateUserDto dto) {
User user = new User(dto);
userRepository.save(user);
emailService.sendWelcome(user);
return user;
}
}
// UserRepository.java
@Repository
public interface UserRepository extends JpaRepository<User, Long> { // Component: User Repository (repository)
Optional<User> findByEmail(String email);
}
Components:
- User Controller (controller) - HTTP request handling
- User Service (service) - Business logic
- User Repository (repository) - Data access
Patterns:
- Dependency Injection (@Autowired)
- Repository Pattern (Spring Data JPA)
- Layered Architecture
React Example (Frontend)
Component identification in React frontend:
// src/features/users/UserList.tsx
export function UserList() { // Component: User List (page/screen)
const { users, loading } = useUsers();
return (
<div>
{users.map(user => <UserCard key={user.id} user={user} />)}
</div>
);
}
// src/features/users/hooks/useUsers.ts
export function useUsers() { // Component: User Hook (state management)
const [users, setUsers] = useState([]);
useEffect(() => {
UserService.fetchUsers().then(setUsers);
}, []);
return { users, loading };
}
// src/services/UserService.ts
export class UserService { // Component: User Service (service)
static async fetchUsers() {
const response = await api.get('/users');
return response.data;
}
static async createUser(data: CreateUserDto) {
const response = await api.post('/users', data);
return response.data;
}
}
Components:
- User List (page) - UI component
- useUsers Hook (state-management) - State management
- User Service (service) - API client