On Sep 14, 2012, at 11:38 PM, Steve Steinitz wrote: > I'm writing a roster window for our point-of-sale app. I have some methods > (on Employee) for binding to a view-based TableView (which looks a bit like a > week planner), a set of methods for each day of the week. So far I have only > implemented and debugged the Monday ones: > > - (Shift *) mondayShift {return [self > shiftForDayOfWeek: [[self class] mondayName]];} > - (void) setMondayShift: (Shift *) value_ > {[self willChangeValueForKey: @"shift" withWeekdayPrefix: [[self class] > mondayName]]; [self didChangeValueForKey: @"shift" withWeekdayPrefix: [[self > class] mondayName]];} // KVO hack > - (NSInteger) mondayStartHourValue {return > [self.mondayShift.startHour integerValue];} > - (void) setMondayStartHourValue: (NSUInteger) value_ > {[self setShiftValue: value_ forKey: @"startHour" forWeekday: > [[self class] mondayName]];} > - (NSInteger) mondayStartMinuteValue {return > [self.mondayShift.startMinute integerValue];} > - (void) setMondayStartMinuteValue: (NSUInteger) value_ > {[self setShiftValue: value_ forKey: @"startMinute" forWeekday: > [[self class] mondayName]];} > - (NSInteger) mondayEndHourValue {return > [self.mondayShift.endHour integerValue];} > - (void) setMondayEndHourValue: (NSUInteger) value_ > {[self setShiftValue: value_ forKey: @"endHour" > forWeekday: [[self class] mondayName]];} > - (NSInteger) mondayEndMinuteValue {return > [self.mondayShift.endMinute integerValue];} > - (void) setMondayEndMinuteValue: (NSUInteger) value_ > {[self setShiftValue: value_ forKey: @"endMinute" forWeekday: > [[self class] mondayName]];} > - (NSInteger) mondayBreakDurationValue {return > [self.mondayShift.breakDuration integerValue];} > - (void) setMondayBreakDurationValue: (NSUInteger) value_ > {[self setShiftValue: value_ forKey: @"breakDuration" forWeekday: > [[self class] mondayName]];} > - (Shift *) createMondayShift {return [self > createShiftForDayOfWeekNamed: [[self class] mondayName]];} > - (void) clearMondayShift {[self > clearShiftForWeekdayNamed: [[self class] mondayName]];}
No offense, but this seems like a terrible design. And your KVO hack method screams of papering over a bug. The existence of methods like -setShiftValue:forKey:forWeekday: seem problematic. A Shift should be a fully self-sufficient object with proper properties. Therefore, this interface shouldn't be on the Employee class. A Shift should simply have properties like startHour, startMinute, endHour, endMinute, and breakDuration. Setting them should be done on the appropriate Shift object. Why in the world would you want to duplicate all of those properties on Employee for each day of the week, when you already can just reference the shift? What I mean is, why would you want client code to look like: [someEmployee setMondayEndMinuteValue:whatever]; when it could be: someEmployee.mondayShift.endMinute = whatever; ? And, even then, are you really anticipating writing client code which hard-codes the name of the weekday that it's operating on all over the place? You're going to write code which refers to Monday and then other code which refers to Tuesday, etc.? Surely you're going to be doing the same sorts of things to the shifts of one day that you'll be doing to shifts of the other days. So, the code should be generalized. The weekday to operate on will be represented in _data_, not in code. (And, for what it's worth, I recommend using an enum to represent which day, not a string, which is error-prone.) Regards, Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com