• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 需要一些关于 iOS 项目的面向对象设计的建议

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:56:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有几个关于代码设计的问题。这可能很长。我会尽可能缩短它。

Q1) 依赖还是独立?

创建一个类并添加所需的功能,以允许对象更改自己的状态与由 Controller (又名 View Controller )更改的状态

我发现代码示例在尝试交流时是最好的: 注意:我减少了一些代码行。来自 http://www.techotopia.com/index.php/An_Overview_of_Objective-C_Object_Oriented_Programming 的原始代码.

无论如何,如果我必须为某个帐户设置帐户余额,建议我这样做:

@interface BankAccount: NSObject
{
    double accountBalance;
    long accountNumber;
}
-(double) getAccountBalance;
-(void) setAccountBalance: (double) x;
@end

// Implementation Section Starts Here

@implementation BankAccount

-(void) setAccountBalance: (double) x
{
    accountBalance = x;
}

-(double) getAccountBalance
{
    return accountBalance;
}
@end

//usage
    BankAccount *account1 = [BankAccount alloc] init];

    [account1 setAccountBalance: 1500.53];

----但是我相信我会在这样的 Controller 中编写它:-----

@interface BankAccount: NSObject
{
    double accountBalance;
    long accountNumber;
}

import "BankAccount.h"
@interface MeViewController : UIViewController 
-(void)setAccountBalancedouble)x toAccountBankAccount *)tempBankAcc;
@end

@implementation myViewController

-(void) setAccountBalancedouble)x toAccountBankAccount *)tempBankAcc
{
    tempBankAcc.accountBalance = x;
}

//USAGE
BankAccount *account1 = [BankAccount alloc] init];

[self setAccountBalance(Account1,1500.53)]

@end

因为我相信是我(meViewController)设置了AccountBalance,而不是帐户本身作为帐户只是一个帐户。 这是一个非常糟糕的主意吗?我可以通过他们的示例看到该对象可以照顾自己(独立),这意味着改变自己的状态,而我的方法说 BankAccount 只能通过/使用 Controller (依赖)修改 ???

Q2) Controller 中应该/不应该包含哪些内容?

我还在某处读到, Controller 内部编写的代码应仅用于:

响应用户交互和更新 View

这是否意味着我不应该在 Controller 中执行以下操作:

从 NSUserDefaults 读取或写入。由于它是一个单例,我认为无论哪个 Controller 当前处于事件状态,写入它都会更容易?馊主意? 我知道我应该在 applicationDidEnterBackground 和 applicationWillTerminate 中保存数据(包括 NSUserDefaults),因此将数据保存在其他地方(例如,在另一个 Controller 中)是个坏主意。

Q3) 您最常使用哪些设计模式,哪些是您错误地滥用的?

单例: 我的理解是 [UIApplication sharedApplication]、[NSNotification defaultCenter] 和其他单例可以通过所有 Controller 访问,那么 NSObject 子类呢?还是 UIView 子类?

显然你可以使用 NSNotification 在模型更新时通知其他 Controller 。 有人可以告诉我何时使用以及如何使用它的示例吗? 也许当您导入一些具有与最初预期不同的属性的数据时,观察者可能会收到升级的数据模型的通知,这是您何时在数据模型中通知 Controller 的示例吗?

现在问题已经足够了。

抱歉,我不得不把它们全都从我的脑海中抹去:-)



Best Answer-推荐答案


第一件事:不要使用这个

@interface BankAccount: NSObject
{
    double accountBalance;
    long accountNumber;
}
-(double) getAccountBalance;
-(void) setAccountBalance: (double) x;
@end

这里,accountBalance ivar 是公共(public)的,而它应该是私有(private)的。

改为使用 @property:

@interface BankAccount: NSObject
    @property (assign, nonatomic) double accountBalance;
@end

这将定义一个 setter:

- (void)setAccountBalancedouble)accountBalance { ... }

还有一个 setter/getter :

- (double)accountBalance { ... }

和一个名为 _accountBalance私有(private) 实例变量 (ivar)。

然后,您可以在实现中使用:

@synthesize accountBalance;

它会像这样自动创建setter/getter:

- (void)setAccountBalancedouble)accountBalance {
    _accountBalance = accountBalance;
}

- (double)accountBalance {
    return _accountBalance;
}

关于ios - 需要一些关于 iOS 项目的面向对象设计的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12703020/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap