餐饮的人力资源四大模块块

感谢大家光临我的博客! 一起努力、共同进步 ~~cc~~
评论 - 327
  三天前基本上把数据库表设计的文档写好,今天想到了一个问题,还要再加几个表,一个是log表,用来记录系统日志,另外再加几个字典表,一些需要配置的数据但又不好放在像xml文件里面的数据可以放在这些字典表里面。
  从今天开始就正式进入系统设计与编码了,详细设计文档等系统做好后再补充了,因为一开始全部写好不大现实,中间过程中会不断地去迭代。现在的想法是每个模块分别去实现,然后再分别记录下来。
  今天要写的是日志模块,因为在生产环境中,好的日志至于重要,系统运行时出现的任何问题可以通过日志记录下来,对于发现与解决问题非常有帮助。因为日志是一个相对比较通用的模块,所以先设计好如果写日志模块,之后再写通用类模块,再数据库访问层与用户自定义控件,然后再数据实体与业务处理层,最后再写用户表现层。
  因为此次不使用第二方控件,所以不考虑像log4net,微软enterprise中好的日志控件,但是看了它们的代码,总体思想都差不多,就是各种级别的日志信息应该以什么样的格式输出到哪种介质中,也就是输出源,像文本文件还是数据库,还是控制台,还是系统日志邮件等等。基于它们的思想,把构思记录下来:
日志最主要的就是一个日志器与附加器,像log4net中可以定义多个日志器,一个日志器可以附加多个输出源,而日志仓库就是如何存储和管理日志器,过虑器如果过虑各种级别的日志,而layout就是如何显示输出的消息。
1、输出源只包含文本文件,数据库,系统日志和邮件。
2、日志级别分别为Fatal, Error, Warn, Info, Debug。
还是拿代码为例子来讲吧,首先定义一个日志器接口与日志操作接口ILog,日志器得先有一个名字,它的方法就是一个Log和IsEnabledFor,ILog包含的方法如下,用过log4net等日志控件的应该很熟悉。
日志器接口详细代码如下:
public interface ILogger
/// &summary&
/// Gets the name of the logger.
/// &/summary&
string Name { get; }
/// &summary&
/// This generic form is intended to be used by wrappers.
/// &/summary&
void Log(LogCategory level, object message, Exception exception);
bool IsEnabledFor(LogCategory level);
然后再定义一个包装接口
public interface ILoggerWrapper
ILogger Logger
定义ILog接口,最后调用的都是在这里定义的接口
public interface ILog : ILoggerWrapper
void Debug(object message);
void Debug(object message, Exception exception);
void DebugFormat(string format, params object[] args);
void Info(object message);
void Info(object message, Exception exception);
void InfoFormat(string format, params object[] args);
void Warn(object message);
void Warn(object message, Exception exception);
void WarnFormat(string format, params object[] args);
void Error(object message);
void Error(object message, Exception exception);
void ErrorFormat(string format, params object[] args);
void Fatal(object message);
void Fatal(object message, Exception exception);
void FatalFormat(string format, params object[] args);
bool IsDebugEnabled
bool IsInfoEnabled
bool IsErrorEnabled
bool IsWarnEnabled
bool IsFatalEnabled
日志器有了,可以附加器呢,也就是源出源,其实真正的任务都是委托这些具体的附加器去做的呢,为什么log4net那么强大,我想它的附加器如此之多也是一大原因吧,基本上我们能想到的它都想到了,我们没有想到的它也想到了,下面就定义的几个具体的附加器。
附加器如何跟前面的说的日志器关联呢,20个附加器不可能都直接与日志器去关联吧,所以定义一个所有附加器要实现的接口IAppender.
interface IAppender
string Name
void Close();
void DoAppender(LogCategory level, object message, Exception exception);
拿文本文件为例,日志的输出源就是文本文件,消息写到这个介质上,下面是一个基类,然后子类就是继承这个类实现Write方法去写日志信息:
public class TextWriterAppender : TextWriter
private TextWriter m_
public TextWriter Writer
get { return m_ }
set { m_writer = }
virtual public string Name
throw new NotImplementedException();
throw new NotImplementedException();
#region Public Methods
/// &summary&
/// Closes the writer and releases any system resources associated with the writer
/// &/summary&
/// &remarks&
/// &para&
/// &/para&
/// &/remarks&
override public void Close()
m_writer.Close();
/// &summary&
/// Dispose this writer
/// &/summary&
/// &param name="disposing"&flag indicating if we are being disposed&/param&
/// &remarks&
/// &para&
/// Dispose this writer
/// &/para&
/// &/remarks&
override protected void Dispose(bool disposing)
if (disposing)
((IDisposable)m_writer).Dispose();
/// &summary&
/// Flushes any buffered output
/// &/summary&
/// &remarks&
/// &para&
/// Clears all buffers for the writer and causes any buffered data to be written
/// to the underlying device
/// &/para&
/// &/remarks&
override public void Flush()
m_writer.Flush();
/// &summary&
/// Writes a character to the wrapped TextWriter
/// &/summary&
/// &param name="value"&the value to write to the TextWriter&/param&
/// &remarks&
/// &para&
/// Writes a character to the wrapped TextWriter
/// &/para&
/// &/remarks&
override public void Write(char value)
m_writer.Write(value);
/// &summary&
/// Writes a character buffer to the wrapped TextWriter
/// &/summary&
/// &param name="buffer"&the data buffer&/param&
/// &param name="index"&the start index&/param&
/// &param name="count"&the number of characters to write&/param&
/// &remarks&
/// &para&
/// Writes a character buffer to the wrapped TextWriter
/// &/para&
/// &/remarks&
override public void Write(char[] buffer, int index, int count)
m_writer.Write(buffer, index, count);
/// &summary&
/// Writes a string to the wrapped TextWriter
/// &/summary&
/// &param name="value"&the value to write to the TextWriter&/param&
/// &remarks&
/// &para&
/// Writes a string to the wrapped TextWriter
/// &/para&
/// &/remarks&
override public void Write(String value)
m_writer.Write(value);
public override Encoding Encoding
get { return m_writer.E }
#endregion
日志器与附加器都有了,怎么去连接它们了,最后我想还是用泛型比较灵活,定义如下:
public class LogFactory&L, A& : ILog
where L : ILogger, new()
where A : IAppender, new()
virtual public void Debug(object message)
Logger.Log(m_levelDebug, message, null);
virtual public void Debug(object message, Exception exception)
Logger.Log(m_levelDebug, message, exception);
virtual public void DebugFormat(string format, params object[] args)
if (IsDebugEnabled)
Logger.Log(m_levelDebug, new SystemStringFormat(CultureInfo.InvariantCulture, format, args), null);
virtual public void Info(object message)
Logger.Log(LevelInfo, message, null);
virtual public void Info(object message, Exception exception)
Logger.Log(LevelInfo, message, exception);
virtual public void InfoFormat(string format, params object[] args)
if (IsInfoEnabled)
Logger.Log(LevelInfo, new SystemStringFormat(CultureInfo.InvariantCulture, format, args), null);
virtual public void Warn(object message)
Logger.Log(LevelWarn, message, null);
virtual public void Warn(object message, Exception exception)
Logger.Log(LevelWarn, message, exception);
virtual public void WarnFormat(string format, params object[] args)
if (IsWarnEnabled)
Logger.Log(LevelWarn, new SystemStringFormat(CultureInfo.InvariantCulture, format, args), null);
virtual public void Error(object message)
Logger.Log(LevelError, message, null);
virtual public void Error(object message, Exception exception)
Logger.Log(LevelError, message, exception);
virtual public void ErrorFormat(string format, params object[] args)
if (IsErrorEnabled)
Logger.Log(LevelError, new SystemStringFormat(CultureInfo.InvariantCulture, format, args), null);
virtual public void Fatal(object message)
Logger.Log(LevelFatal, message, null);
virtual public void Fatal(object message, Exception exception)
Logger.Log(LevelFatal, message, exception);
virtual public void FatalFormat(string format, params object[] args)
if (IsFatalEnabled)
Logger.Log(LevelFatal, new SystemStringFormat(CultureInfo.InvariantCulture, format, args), null);
virtual public bool IsDebugEnabled
return Logger.IsEnabledFor(m_levelDebug);
virtual public bool IsInfoEnabled
return Logger.IsEnabledFor(m_levelInfo);
virtual public bool IsErrorEnabled
return Logger.IsEnabledFor(m_levelError);
virtual public bool IsWarnEnabled
return Logger.IsEnabledFor(m_levelWarn);
virtual public bool IsFatalEnabled
return Logger.IsEnabledFor(m_levelFatal);
private LogCategory m_levelD
public LogCategory LevelDebug
get { return LogCategory.D }
set { m_levelDebug = LogCategory.D }
private LogCategory m_levelI
public LogCategory LevelInfo
get { return ; }
set { m_levelInfo = ; }
private LogCategory m_levelW
public LogCategory LevelWarn
get { return LogCategory.W }
set { m_levelWarn = LogCategory.W }
private LogCategory m_levelE
public LogCategory LevelError
get { return LogCategory.E }
set { m_levelError = LogCategory.E }
private LogCategory m_levelF
public LogCategory LevelFatal
get { return LogCategory.F }
set { m_levelFatal = LogCategory.F }
public ILogger Logger
get { return new L(); }
把上面的泛型类闭合一个日志类:
public class LogBase&A& : LogFactory&LogBase&A&, A&, ILogger
where A : IAppender, new()
private LogCategory m_logL
public string Name
return "LogBase";
private A m_
public A Instance
if (m_instance == null)
m_instance = new A();
set { m_instance = }
public void Log(LogCategory level, object message, Exception exception)
Instance.DoAppender(level, message, exception);
public bool IsEnabledFor(LogCategory level)
switch (level)
case LogCategory.Fatal:
LevelFatal = LogCategory.F
case LogCategory.Error:
LevelError = LogCategory.E
case LogCategory.Warn:
LevelWarn = LogCategory.W
case LogCategory.Debug:
LevelDebug = LogCategory.D
LevelInfo = ;
m_logLevel = ;
return true;
再关闭一个泛型参数:
public class TxtFileLog :
LogBase&TxtFileLog&, IAppender
private string m_
private FileLogWriter m_
public TxtFileLog()
if (m_writer == null)
m_writer = new FileLogWriter();
public FileLogWriter Writer
get { return m_ }
set { m_writer = }
public new string Name
public void Close()
m_writer.Close();
public void DoAppender(LogCategory level, object message, Exception exception)
m_writer.Write(Convert.ToString(message), level, (LogMessage)exception);
上面的类实现了日志器与附加器的连接,然后就可以去客户端验证好不好用了:
ILog log = new TxtFileLog();
log.Debug("Are you OK??");
打印如下信息:
这只是第一步,后面还得写数据库与邮件附加器的输出方法。写一个好的日志器还真不容易。之后会把一些可以配置的东西放到配置文件里面,
接下来就写通用类与数据库访问层。
注:需要完整源码的可以mark下,无偿发到你邮箱餐饮加盟品牌推荐
特别推荐品牌模块一 餐饮业概述_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
模块一 餐饮业概述
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢&&& 转载免责声明:凡本站注明 “来自:XXX(非赢商网)”的新闻稿件和图片作品,系本站转载自其它媒体,转载目的在于信息传递,并不代表本站赞同其观点和对其真实性负责。如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系本站新闻中心,电话:022-2-,邮箱:。
来自:中国饭店协会(查看更多“”新闻)
此新闻暂无评论哦!赶紧抢坐沙发吧!
& [所发表点评仅代表网友个人观点,不代表赢商网观点]
综合体省市:青岛黄岛区面积:80000O综合体省市:昆明呈贡区面积:13.5万O商业街区省市:安康汉滨区面积:4万O购物中心省市:西安新城区面积:13万O购物中心省市:延安宝塔区面积:5.4万O
火锅烧烤品牌定位:中高档拓展区域:全国大型超市品牌定位:大众化拓展区域:华南区域快时尚品牌定位:中高档拓展区域:全国饮品甜点品牌定位:高档拓展区域:全国,西北区域饮品甜点品牌定位:大众化拓展区域:全国
在这个看脸的时代,不只对人的颜值要求高,就连餐厅也愈发注意到颜值的重要性。好吃之外,一个餐厅的空间设计成为食客们评价体系中重要的一环。餐饮创收不可错过的四大手段!
开什么样的餐厅?怎样做最赚钱?什么规模和档次才合适?汇报以及风险如何?这是所有餐饮人在开店之初都抱有的疑问。其实餐饮开店是一个不断学习的过程,从刚开始的微利甚至略赔,再到后来的得心应手。在摸索中找到最适合自己的开店方式,这其中会有些盈利窍门,希望各位餐饮人能从分享中学到一些经验。酒水饮品在摸底考察,对比了不同餐厅的盈利状况后,可以发现,餐厅能带来大利润的不是餐饭而是酒水,酒水这一部分可以作为很好的创收项目。二两装白酒,餐厅售卖价可是远远高于零售批发的,矿泉水的利润就更大了。若是红酒、啤酒、果汁碳酸饮料之类的利润都不会低于百分之十。但应注意的是,酒水创收的定价以及酒水的品种。也就是说,酒水的品种和价位要跟本店的目标客户群和主要顾客相搭配,否则,酒水收入就无法达到令人满意的状态,或许还会给消费者留下不实惠的印象。小店打温情牌店面较小就不要走高端路线了,而让顾客感到在饭店有家的感觉,这就对服务人员有高要求了。聪明而热心的经营者和服务人员,视客人如家人,能够经常和客人进行自然亲切的接触,让消费者愿意常来常往。还有就是菜品要经常变化。要随时根据客人的口味调整菜单,还可根据季节变化调整口味,由于现代消费者对饮食的嗜好快速变换,唯有不断让客人有新鲜感,才不至于日久生腻。通过和客人的认识交往和深入接触,逐渐客人固定下来,久而久之,这些老顾客就能成为小饭店经久不衰的基础。而且这种行为更契合当下粉丝社群的潮流。电子会员制
来源:实时财经
来源:财经评论
来源:腾讯证券
来源:股城网
来源:股市大牛
来源:环球外汇网
来源:牛股王
来源:腾讯证券
来源:中国网财经
来源:腾讯证券
来源:腾讯证券
来源:峰哥论股堂
来源:腾讯证券
来源:峰哥论股堂
来源:行股志今
来源:股票人生
来源:腾讯证券
来源:华夏时报
来源:投资快报
来源:腾讯证券
来源:股城网
来源:京华时报
来源:本地宝
来源:澎湃新闻
来源:北京晨报
来源:中国新闻网
来源:中国新闻网
来源:法制晚报
来源:综合
来源:政事儿
来源:地区新闻
来源:中新网
来源:地区新闻
来源:解放日报
来源:文汇报
来源:十堰晚报
来源:中央纪委监察部网站
来源:解放日报
来源:海口新闻
来源:澎湃新闻
来源:万股常情
来源:铁血网
来源:雇佣兵
来源:环球财经头条
来源:万股常情
来源:环球财经头条
来源:复兴网
来源:亮剑网
来源:复兴网
来源:军人之家
来源:环球时报
来源:财经101
来源:实时财经
来源:利刃军事
来源:参考消息
来源:丛林战神
来源:战壕
来源:军情风暴眼
来源:股票分析于帮助
来源:沙漠孤狼
来源:参政内幕
来源:一华独秀
来源:韩星网
来源:光明网娱乐
来源:黑历史档案
来源:腾讯娱乐
来源:腾讯娱乐
来源:明星生活
来源:新浪娱乐
来源:腾讯娱乐
来源:腾讯娱乐
来源:宠妈妈
来源:关公战秦琼
来源:宝宝堂亲子育儿
来源:韩星网
来源:时尚COSMO
来源:手机人民网
来源:视界网
来源:睹图
来源:养生之道网
来源:视觉中国最星动
来源:呆萌宠物
来源:悬疑档案
来源:香港凤凰周刊
来源:汇智讲堂
来源:小本的图册
来源:头条夜宵
来源:万股常情
来源:互联网的一些事
来源:环球时报
来源:中国气象局
来源:环球时报
来源:视觉中国图播快报
来源:口袋贵金属
来源:视觉中国最星动
来源:澎湃新闻
来源:东南网  
来源:视觉中国最星动
来源:百万庄通讯社
来源:中国东盟博览杂志
来源:浙江在线
来源:软萌萌
来源:中国青年网
来源:凤凰网
来源:信息时报
来源:网易
来源:天下界
来源:重庆晚报
来源:重庆网络电视台
来源:中国新闻网
来源:中国新闻网
来源:浙江在线
来源:中国新闻网
来源:华西都市报
来源:长安剑
来源:前街一号
来源:剥洋葱
来源:上海热线侬好上海
来源:中国江西网
来源:北京晨报
来源:我爱汽车保养
来源:陈庆镒
来源:车透社
来源:汽车之家
来源:有车以后
来源:山东高速交警高密大队
来源:汽车生活圈
来源:车之鹰FLY
来源:汽车头条
来源:suv之家
来源:AV车评
来源:腾讯网
来源:学车资讯
来源:小白测评
来源:车衣裳
来源:汽车探索网
来源:北京老郭
来源:微车
来源:砍柴网
来源:汽车大世界网
来源:LOL君
来源:未知
来源:LOL君
来源:不解释
来源:搞笑大工厂
来源:搞笑无极限
来源:这个傻小子
来源:开心坊
来源:笑看江湖
来源:微头条
来源:内涵段子神
来源:微头条
来源:搞笑笑话说
来源:内涵段子神
来源:我的脑壳长了个包
来源:搞笑大杂烩
来源:幸福快乐智慧人生
来源:YOKA明星
来源:健身资讯
来源:国际在线
Ctrl+D&将本页面保存为书签,全面了解最新资讯,方便快捷。

我要回帖

更多关于 营销的四大模块 的文章

 

随机推荐