--- name: Wheels Refactoring description: Refactor Wheels code for better performance, security, and maintainability. Use when optimizing code, fixing anti-patterns, improving performance, or enhancing security. Provides refactoring patterns and best practices. --- # Wheels Refactoring ## Performance Refactoring ### N+1 Query Problem **Before:** ```cfm

#posts.user().name#

``` **After:** ```cfm posts = model("Post").findAll(include="user");

#posts.userName#

``` ### Eager Loading **Before:** ```cfm posts = model("Post").findAll(); // Associations loaded lazily ``` **After:** ```cfm posts = model("Post").findAll(include="user,comments,tags"); // All associations loaded upfront ``` ## Security Refactoring ### Parameter Verification **Before:** ```cfm function show() { post = model("Post").findByKey(key=params.key); } ``` **After:** ```cfm function config() { verifies(only="show", params="key", paramsTypes="integer"); } function show() { post = model("Post").findByKey(key=params.key); } ``` ### SQL Injection Prevention **Before:** ```cfm where="userId = #params.userId#" // Vulnerable! ``` **After:** ```cfm where="userId = #params.userId#" // Wheels escapes automatically // Or use parameterized queries ``` ## Code Quality Refactoring ### Extract Method **Before:** ```cfm function create() { user = model("User").new(params.user); user.password = hash(user.password, "SHA-512"); if (user.save()) { sendMail(to=user.email, subject="Welcome"); redirectTo(action="show", key=user.key()); } } ``` **After:** ```cfm function create() { user = model("User").new(params.user); if (user.save()) { redirectTo(action="show", key=user.key()); } } // In User model: private function hashPassword() { this.password = hash(this.password, "SHA-512"); } private function sendWelcomeEmail() { sendMail(to=this.email, subject="Welcome"); } ```