

别忘点个“在看”。
分享个人经验,保留阅读记录,做时间的朋友
作者:韦世东
来源:NightTeam
程序设计的好与坏,早在我们青葱岁月时就接触过了,只是那是并不知道这竟如此重要。能够立即改善程序设计、写出“好”代码的知识有以下几点:
•面向对象五个基本原则;•常见的三种架构;•绘图;•起一个好名字;•优化嵌套的 if else 代码;
当然,其他技术知识的丰富程度也决定了程序设计的好坏。例如通过引入消息队列解决双端性能差异问题、通过增加缓存层提高查询效率等。下面我们一起来看看,上面列出的知识点包含哪些内容,这些内容对代码和程序设计的改善有何帮助。
本书作者是 2010 级学生,面向对象是作者青葱时期发展火热的编程范式。它的五个基本原则是:
•单一职责原则;•开放封闭原则;•依赖倒置原则;•接口隔离原则;•合成复用原则;
下面我们将通过对比和场景假设的方式了解五个基本原则对代码质量的影响。
没错,立竿见影、效果卓越。对于我们这些自学编程无师自通的人来说,能把功能实现就可以了,根本没有时间考虑代码优化和维护成本问题。时光流逝,竟在接触编程很长一段时间后才发现它竟如此重要。
俗话说只要代码写的够烂,提升就足够明显。以一个从文件内容中匹配关键数据并根据匹配结果发出网络请求的案例,看看大部分程序员的写法:
import re
import requests
FILE = "./information.fet"
def extract(file):
fil = open(file, "r")
content = fil.read()
fil.close()
find_object = re.search(r"url=d+", content)
find = find_object.group(1)
text = requests.get(find)
return text
if __name__ == "__main__":
text = extract(FILE)
print(text)
需求已经实现,这点毋庸置疑,但是问题来了:
•如果读取文件的时候发生异常了怎么办?•如果数据源发生变化该如何处理?•如果网络请求返回的数据不符合最终要求怎么办?
如果你心里的第一个反应是改代码,那你就要注意了。完成一件事中间的某个环节发生变化,改代码是在所难免的,但是如果按照上面这种写法,不仅代码越改越乱,连逻辑也会越来越乱。单一职责原则表达的是让一个函数尽量只做一件事,不要将多件事混杂在一个函数中。
上面的代码如果重新设计,我认为至少应该是这样的:
def get_source():
"""获取数据源"""
return
def extract_(val):
"""匹配关键数据"""
return
def fetch(val):
"""发出网络请求"""
return
def trim(val):
"""修剪数据"""
return
def extract(file):
"""提取目标数据"""
source = get_source()
content = extract_(source)
text = trim(fetch(content))
return text
if __name__ == "__main__":
text = extract(FILE)
print(text)
把原来放在一个函数中实现的多个步骤拆分成为多个更小的函数,每个函数只做一件事。当数据源发生变化时,只需要改动 get_source 相关的代码即可;如果网络请求返回的数据不符合最终要求,我们可以在 trim 函数中对它进行修剪。这样一来,代码应对变化的能力提高了许多,整个流程也变得更清晰易懂。改动前后的变化如下图所示:
单一职责原则的核心是解耦和增强内聚力,如果一个函数承担的职责过多,等于把这些职责耦合在一起,这种耦合会导致脆弱的设计。当发生变化时,原本的设计会遭受到意想不到的破坏。单一职责原则实际上是把一件事拆分成多个步骤,代码修改造成的影响范围很小。
开放封闭原则中的开放指的是对扩展开放,封闭指的是对修改封闭。需求总是变化的,业务方这个月让你把数据存储到 MySQL 数据库中,下个月就有可能让你导出到 Excel 表格里,这时候你就得改代码了。这个场景和上面的单一职责原则很相似,同样面临代码改动,单一职责原则示例主要表达的是通过解耦降低改动的影响,这里主要表达的是通过对扩展开放、对修改封闭提高程序应对变化的能力和提高程序稳定性。
稳定这个词如何理解呢?
较少的改动或者不改动即视为稳定,稳定意味着调用这个对象的其它代码拿到的结果是可以确定的,整体是稳定的。
按照一般程序员的写法,数据存储的代码大概是这样的:
class MySQLSave:
def __init__(self):
pass
def insert(self):
pass
def update(self):
pass
class Business:
def __init__(self):
pass
def save(self):
saver = MySQLSave()
saver.insert()
功能是能够实现的,这点毋庸置疑。来看看它如何应对变化,如果要更换存储,那么就意味着需要改代码。按照上面的代码示例,有两个选择:
•重新写一个存储到 ExcelSave 的类;•对 MySQLSave 类进行改动;
上面的两种选择,无论怎么选都会改动 2 个类。因为不仅存储的类需要改动,调用处的代码也需要更改。这样一来,它们整体都是不稳定的。如果换一种实现方式,根据依赖倒置的设计指导可以轻松应对这个问题。边看代码边理解:
import abc
class Save(metaclass=abc.ABCMeta):
@abc.abstractmethod
def insert(self):
pass
@abc.abstractmethod
def update(self):
pass
class MySQLSave(Save):
def __init__(self):
self.classify = "mysql"
pass
def insert(self):
pass
def update(self):
pass
class Excel(Save):
def __init__(self):
self.classify = "excel"
def insert(self):
pass
def update(self):
pass
class Business:
def __init__(self, saver):
self.saver = saver
def insert(self):
self.saver.insert()
def update(self):
self.saver.update()
if __name__ == "__main__":
mysql_saver = MySQLSave()
excel_saver = Excel()
business = Business(mysql_saver)
这里通过内置的 abc 实现了一个抽象基类,这个基类的目的是强制子类实现要求的方法,以达到子类功能统一。子类功能统一后,无论调用它的哪个子类,都是稳定的,不会出现调用方还需要修改方法名或者修改传入参数的情况。
依赖倒置中的倒置,指的是依赖关系的倒置。之前的代码是调用方 Business 依赖对象 MySQLSave,一旦对象 MySQLSave 需要被替换, Business 就需要改动。依赖倒置中的依赖指的是对象的依赖关系,之前依赖的是实体,如果改为后面这种依赖抽象的方式,情况就会扭转过来:
实体 Business 依赖抽象有一个好处:抽象稳定。相对于多变的实体来说,抽象更稳定。代码改动前后的依赖关系发生了重大变化,之前调用方 Business 直接依赖于实体 MySQLSave,通过依赖倒置改造后 Busines 和 ExcelSave、 MySQLSave 全都依赖抽象。
这样做的好处是如果需要更换存储,只需要创建一个新的存储实体,然后调用 Business 时传递进去即可,这样可以不用改动 Business 的代码,符合面向修改封闭、面向扩展开放的开放封闭原则;
依赖倒置的具体实现方式使用了一种叫做依赖注入的手段,实际上单纯使用依赖注入、不使用依赖倒置也可以满足开闭原则要求,感兴趣的读者不妨试一试。
接口隔离原则中的接口指的是 Interface,而不是 Web 应用里面的 Restful 接口,但是在实际应用中可以将其抽象理解为相同的对象。接口隔离原则在设计层面看,跟单一职责原则的目的是一致的。接口隔离原则的指导思想是:
•调用方不应该依赖它不需要的接口;•依赖关系应当建立在最小接口上;
这实际上是告诉我们要给接口减肥,过多功能的接口可以选用拆分的方式优化。举个例子,现在为图书馆设计一个图书的抽象类:
import abc
class Book(metaclass=abc.ABCMeta):
@abc.abstractmethod
def buy(self):
pass
@abc.abstractmethod
def borrow(self):
pass
@abc.abstractmethod
def shelf_off(self):
pass
@abc.abstractmethod
def shelf_on(self):
pass
图可以被购买、可以被借阅、可以下架、可以上架,这看起来并没有什么问题。但这样一来这个抽象只能提供给管理人员使用,用户操作时需要再设定一个新的抽象类,因为你不可能让用户可以操纵图书上下架。接口隔离原则推荐的做法是把图书的上下架和图书购买、借阅分成 2 个抽象类,管理端的图书类继承 2 个抽象类,用户端的图书类继承 1 个抽象类。这么看起来是有点绕,不要慌,我们看图理解:
这样是不是一下就看懂了。这个指导思想很重要,不仅能够指导我们设计抽象接口,也能够指导我们设计 Restful 接口,还能够帮助我们发现现有接口存在的问题,从而设计出更合理的程序。
合成复用原则的指导思想是:尽量使用对象组合,而不是继承来达到复用的目的。合成复用的作用是降低对象之间的依赖,因为继承是强依赖关系,无论子类使用到父类的哪几个属性,子类都需要完全拥有父类。合成采用另一种方式实现对象之间的关联,降低依赖关系。
为什么推荐优先使用合成复用,而后考虑继承呢?
因为继承的强依赖关系,一旦被依赖的对象(父类)发生改变,那么依赖者(子类)也需要改变,合成复用则可以避免这样的情况出现。要注意的是,推荐优先使用复用,但并不是拒绝使用继承,该用的地方还得用。我们以一段代码为例,说明合成复用和继承的差异:
import abc
class Car:
def move(self):
pass
def engine(self):
pass
class KateCar(Car):
def move(self):
pass
def engine(self):
pass
class FluentCar(Car):
def move(self):
pass
def engine(self):
pass
这里的 Car 作为父类,拥有 move 和 engine 2 个重要属性,这时候如果需要给汽车涂装颜色,那么就要新增一个 color 属性,3 个类都要增加。如果使用合成复用的方式,可以这么写:
class Color:
pass
class KateCar:
color = Color()
def move(self):
pass
def engine(self):
pass
class FluentCar:
color = Color()
def move(self):
pass
def engine(self):
pass
类对象合成复用的具体操作是在类中实例化一个类对象,然后在需要的时候调用它。代码可能没有那么直观,我们看图:
这个例子主要用于说明继承和合成复用的具体实现方式和前后变化,对于 Car 的继承无需深究,因为如果你执着地讨论为什么右图中的 2 个 Car 不用继承,就会陷入牛角尖。
这里的合成复用选用的实现方式是在 2 个 Car 里面实例化另一个类 Color,其实也可以用依赖注入的手段在外部实例化 Color,然后把实例对象传递给 2 个 Car。
了解多种不同的架构可以使我们的知识面更宽广,面对一类问题的时候可以提出其它解决办法。同时,了解多种架构可以让我们在设计阶段做好规划,避免后续频繁的重构。常见的三种架构分别是:
•单体架构;•分布式架构;•微服务架构;
单体架构是我们平时接触较多的架构,也是相对容易理解的架构。单体架构把所有功能都聚合在一个应用里,我们可以简单地将这种架构视作:
这种架构简单、容易部署和测试,大部分应用的初期都采用单体架构。单体架构也有几个明显缺点:
•复杂性高,所有功能糅合在一个应用里,模块多、容易出现边界模糊,而且随着时间的推移和业务的发展,项目越来越大、代码越来越多,整体服务效率逐渐下降;•发布/部署频率低,牵一发而动全身,新功能或问题修复的发布上线需要多方协调,发布时间一拖再拖。项目大则构建时间长、构建失败的几率也会有所增加;•性能瓶颈明显,一头牛再厉害也抵不过多头牛合力的效果,随着数据量、请求并发的增加,读性能的不足最先暴露出来,接着你就会发现其它方面也跟不上了;•影响技术创新:单体架构通常选用一类语言或一类框架统一开发,想要引入新技术或者接入现代化的服务是很困难的;•可靠性低,一旦服务出现问题,影响是巨大的。
分布式架构相对于单体架构而言,通过拆分解决了单体架构面临的大部分问题,例如性能瓶颈。假如单体架构是一头牛,那么分布式架构就是多头牛:
当单体架构出现性能瓶颈时,团队可以考虑将单体架构转换为分布式架构,以增强服务能力。当然,分布式并不是万能的,它解决了单体架构性能瓶颈、可靠性低的问题,但复杂性问题、技术创新问题和发布频率低依然存在,这时候可以考虑微服务。
微服务架构的关键字是拆,将原本糅合在一个应用中的多个功能拆成多个小应用,这些小应用串联起来组成一个与之前单体架构功能相同的完整应用。具体示意如下:
每个微服务可以独立运行,它们之间通过网络协议进行交互。每个微服务可以部署多个实例,这样一来就具备了跟分布式架构相同的性能。单个服务的发布/部署对其它服务的影响较小,在代码上没有关联,因此可以频繁的发布新版本。复杂性的问题迎刃而解,拆分之后架构逻辑清晰、功能模块职责单一,功能的增加和代码的增加也不会影响到整体效率。服务独立之后,项目就变得语言无关,评价服务可以用 Java 语言来实现也可以用 Golang 语言实现,不再受到语言或者框架的制约,技术创新问题得以缓解。
这是不是很像单一职责原则和接口隔离原则?
从上面的对比来看,似乎分布式架构比单体架构好,微服务架构比分布式架构好,这么说来微服务架构>分布式架构>单体架构?
这么理解是不对的,架构需要根据场景和需求选择,微服务架构和分布式架构看上去很美,但也衍生出了许多新问题。以微服务架构为例:
•运维成本高,在单体架构时,运维只需要保证 1 个应用正常运行即可,关注的可能只是硬件资源消耗问题。但如果换成微服务架构,应用的数量成百上千,当应用出现问题或者多应用之间协调异常时,运维人员的头就会变大;•分布式系统固有的复杂性,网络分区、分布式事务、流量均衡对开发者和运维进行了敲打;•接口调整成本高,一个接口的调用方可能有很多个,如果设计时没有遵循开放封闭原则和接口隔离原则,那么调整的工作量会是非常大的;•接口性能受限,原本通过函数调用的方式交互,在内存中很快就完成了,换成接口后通过网络进行交互,性能明显下降;•重复劳动,虽然有公共模块,但如果语言无关且又要考虑性能(不用接口交互)就需要自己实现一份相同功能的代码;
到底用哪种架构,需要根据具体的场景来选择。如果你的系统复杂度并没有那么高、性能追求也没有那么高,例如一个日数据量只有几万的爬虫应用,单体架构就足以解决问题,不需要强行做成分布式或者微服务,因为这样只会增加自己的工作量。
在需要表达关系和逻辑梳理的场景里,图永远比代码好。业内流行这么一句话“程序开发,设计先行”,说的是在开发前,需要对程序进行构思和设计。试想,如果连对象关系和逻辑都说不清楚,写出的代码会是好代码吗?
在构思项目时可以使用用例图挖掘需求和功能模块;在架构设计时可以使用协作图梳理模块关系;在设计接口或者类对象时可以使用类图做好交互计划;在功能设计时可以使用状态图帮助我们挖掘功能属性……
了解绘图的重要性之后,具体的绘图方法和技巧可翻阅本书(《Python 编程参考》)的工程师绘图指南章节展开学习。
你还记得自己曾经起过的那些名字吗:
•reversalList•get_translation•get_data•do_trim•CarAbstract
起一个好的、合适的名字能够让代码风格更统一,看上去清晰了然。起一个好名字不单单是单词语法的问题,还会涉及风格选择和用途。具体的命名方法和技巧可翻阅本书(《Python 编程参考》)的命名选择与风格指南章节展开学习。
写代码的时候用一些控制语句是很正常的事,但是如果 if else 嵌套太多,也是非常头疼的,代码看上去就像下面这样。
if "http" not in url:
return
if "www" not in url:
return
这是我平时常用的优化办法,后来在张晔老师的付费专栏中看到这种手段的名称——卫语句。
当然,这种简单的逻辑处理和 if else 控制流用卫语句进行处理是很有效的,但如果逻辑再复杂一些,用卫语句的效果就不见的那么好了。假设汽车 4S 店有折扣权限限制,普通销售有权对 30 万以内金额的汽车授予一定折扣,超过 30 万但在 80 万以内需要精英销售进行授权,更高价格的车折扣需要店长授权。这个功能可以归纳为根据金额的大小来确定授权者,对应代码如下:
def buying_car(price):
if price < 300000:
print("普通销售")
elif price < 800000:
print("精英销售")
elif price < 1500000:
print("店长")
代码思路清晰,但存在的问题也明显。如果以后扩展价格和定级,会增加更多的 if else 语句,代码将变得臃肿。控制语句的顺序是固定在代码中的,如果想要调整顺序,只能修改控制语句。
那么问题来了,有比 if else 更合适的办法吗?
这时候可以考虑一种叫做责任链的设计模式,责任链设计模式的定义为:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
看起来有点绕,我们通过代码图加深理解:
处理类执行前根据先决条件判断自身的 handler 是否能够处理,如果不能则交给 next_handler,也就是责任链的下一个节点。上面的用责任链实现为:
class Manager:
def __init__(self,):
self.obj = None
def next_handler(self, obj):
self.obj = obj
def handler(self, price):
pass
class General(Manager):
def handler(self, price):
if price < 300000:
print("{} 普通销售".format(price))
else:
self.obj.handler(price)
class Elite(Manager):
def handler(self, price):
if 300000 <= price < 800000:
print("{} 精英销售".format(price))
else:
self.obj.handler(price)
class BOSS(Manager):
def handler(self, price):
if price >= 800000:
print("{} 店长".format(price))
创建好抽象类和具体的处理类之后,它们还没有关联关系。我们需要将它们挂载到一起,成为一个链条:
general = General()
elite = Elite()
boss = BOSS()
general.next_handler(elite)
elite.next_handler(boss)
这里建立的责任链顺序为 General -> Elite -> BOSS,调用方只需要传递价格给 General,如果它没有折扣的授予权它会交给 Elite 处理,如果 Elite 没有折扣授予权则会交给 BOSS 处理。对应代码如下:
prices = [550000, 220000, 1500000, 200000, 330000]
for price in prices:
general.handler(price)
这跟我们去 4S 店购车是一样的,作为客户,我们确定好要买的车即可,至于 4S 店如何申请折扣,谁来授权与我无关,我能拿到相应的折扣即可。
至此,if else 优化知识学习完毕。
做到以上几点,相信你的代码质量和程序设计水平会有一个不错的提升,加油!
文章中提到的《Python编程参考》可在韦世东的技术专栏 https://www.weishidong.com 在线阅读。
转自:https://mp.weixin.qq.com/s/A_QPBAz6BdYeSpM3fehWeQ
来源|正解局(ID:zhengjieclub)
前几天,网上流传一个视频,据说因为一个明星到少林寺参观,普通游客被限流。
有游客就怒骂明星:“你算个啥东西呀?”
事情曝光后,网络沸腾,无数网友表示气愤。
爆料视频中,大爷怒吼
后来有消息说,这个明星是喜剧演员杨迪。
不过,杨迪也很委屈,他表示,自己是参加当地文化宣传活动,才来少林寺的,全程都由活动方在操作,此次事件实属“背锅”。
虽然有了解释,但很多网友却不认同。
据说,这样的现象在少林寺,并不是第一次出现了。
之前不少明星来少林寺,同样享受了VIP待遇,普通游客也一样被限流。
这种“包场”背后,不仅是对公共资源的不正当占有,也是网友对这种“特权”的强烈反感。
特别是,一些明星出席活动,保安前呼后拥,随意呵斥和推搡观众。
宁愿得罪游客,也要为明星保驾护航,少林寺傻吗?
当然不是。
少林寺愿意给予明星那么多照顾,因为彼此有商业需要。
根源是,少林寺铜钱味,越来越浓。
现在说的少林寺,一般指的是河南登封嵩山少林寺,也就是北少林,有“禅宗祖庭,天下第一名刹”之誉,是中国佛教禅宗祖庭。
而在福建的福州、莆田、泉州、宁德等地,都有各自的“少林寺”,统一被称为“南少林”。
其中泉州的南少林,据说是十三棍僧之一的智空入闽所建,相对在南少林中更有名些。
始建于公元495年的嵩山少林寺,已有上千年的历史
河南的北少林,始建于公元495年,是推崇佛教的北魏孝文帝为宣扬佛法,专门为远道而来的印度高僧跋陀,在嵩山少室山北麓修建。
只是那时的嵩山少林寺,在神州无数寺庙里,毫无存在感,既没有今天如雷贯耳的名气,规模也略显寒酸。
直至隋末唐初,当时的少林寺十三棍僧出山,其中以昙宗为首的武僧活捉了李世民的死对头王世充侄子王仁则,得到李世民赞许,特赐给嵩山少林寺良田千顷,这才让少林寺大放异彩,成为天下名刹。
从此,“昼习经曲,夜练武艺”,修佛习武成为了嵩山少林寺独特的传统。
其后,历经唐宋元明,每逢国家有难,少林寺僧人都会提起棍棒投入保家卫国的战斗中,凭借一身过硬的功夫,屡建奇功,同时也传扬了少林功夫。
被焚毁前的少林寺一角
可惜在1928年时,军阀石友三率兵攻入少林寺,纵火焚烧了法堂、天王殿、大雄宝殿等众多古建筑,许多珍贵的藏经也因此灰飞烟灭,令人惋惜。
经此一劫,少林寺一蹶不振。
千年古刹沦为废墟,周围荒草纵横,鸟兽横行,直至解放后才得以修缮,但依旧没有太大发展。
少林寺后来的火热,完全是由于一部电影。
到了1980年代。
那时,中国内地电影还在摸索中,但香港电影已是蓬勃发展,只是层出不穷的各类“大侠”故事,早已让人兴趣索然。
这时,有人提出能不能将传说中的少林功夫拍成电影,“少林武僧”这样的题材从没有人拍过,一定赚钱。
恰好当时相关领导也和香港电影人提议,把正能量的传统武侠故事搬上荧幕,振奋下国人精神。
这个提议,很快得到了香港导演张鑫炎的响应,提出“要想让内地电影一鸣惊人,就必须动真格的”。
这句话不是随便说说,在各方的支持和努力下,1981年春天,武侠片《少林寺》正式开机。
同一年,18岁的安徽青年刘应成来到少林寺剃度,拜方丈释行正为师,法号释永信。
而这个青年,将会深刻影响少林寺的走向。
先回到拍电影。
这部片子规模宏大,演员中,有才18岁,却已蝉联五届武术比赛冠军的李连杰,以及“剑术大师”于承惠、“螳螂拳王”于海、“剑术冠军”王常凯等等武术高手,一共18人,被剧组称之为“十八罗汉”。
这部电影,说的正是少林弟子辅助大唐创立的故事。
1982年《少林寺》电影剧照
可当剧组到了少林寺,想现场取景的时候,却傻了眼:少林寺因为年久失修,寺内寺外杂草丛生,荒草都有一人多高;案台上的菩萨一个个东倒西歪,没精打采;就连庙里的和尚功夫,也不像想象的那般高深。
实在没辙的剧组,在少林寺只拍了若干镜头。
其他大部分的拍摄,实际上是在杭州中岳庙以及西湖周围拍摄完成的。
1982年,《少林寺》上映,举国震动。
单从票房上来说,《少林寺》国内公映时的票价只有3毛钱,结果却创下1.6亿票房的惊人纪录。
也就是说,观众总计超过5亿人次,是当时全国一半人口的数量。
《少林寺》也是内地第一部在香港上映的功夫片,创下1616万港币的超高纪录,超过李小龙生前创下的530万港币最高纪录,甚至还打破了成龙在1980年创下的1020万港币的最新纪录。
香港市场破华语票房纪录的影片
片子后来还被亚洲很多国家引进。
在日本,《少林寺》创下40亿日元票房纪录;在韩国创造了51亿韩元的票房纪录,均是最卖座的功夫电影。
可以说,这部电影掀起了神州大地学武习武的热潮,捧红了李连杰等明星。
但最重要的是,电影更是让无数国人,甚至海外都知道:在河南,有个少林寺。
少林寺,也在不知不觉中,被默认为河南北少林。
电影《少林寺》成为激励一代人的功夫巨片
电影火热后,河南当地迅速整修了少林寺,很多慕名而来的中外游客纷纷踏足,少林寺成为中华武术走向世界的一张靓丽的名片,更成为河南旅游的一面“金字招牌”。
1987年,24岁的释永信在方丈释行正圆寂后,正式成为少林寺主持。
而释永信,有着不一样的头脑。
他主持重建法堂、钟楼、鼓楼等,还成立了“少林武僧团”进行全国巡演,进一步提高了少林寺的知名度。
也正是在释永信的不断努力下,少林寺的名气越来越大,不仅开公司办企业,还在商业界掀起了一波又一波的巨浪。
2009年底,有媒体报道,少林寺要上市了。
据说当时有协议,香港中旅集团、登封市共投1个亿,成立“港中旅(登封)嵩山少林文化旅游有限公司”,其中港方占51%股本控股,少林寺门票经营权等以及景区资产被登封市作价4900万入股,占49%,年限40年。
消息传出后,网上一片哗然。
不过,释永信出面解释,“少林寺永不上市。”
虽然上市风波过去了。
但少林寺商业帝国的开疆拓土,却没有停止过。
1998年,释永信以500万注册成立了河南少林实体发展有限公司,正式开启了少林寺资本化运作的道路。
学的是佛教经典,念的是清心寡欲的经文,但围绕“少林寺”,也一样赚了个盆满钵满。
从武术学校到佛教用品、旅游、文创、餐饮、药品,甚至还有专门的网店“少林欢喜地”,这些产业既有自己开发的,也有授权合作的,内容包罗万象,产业链复杂到堪比娱乐巨头“迪士尼”。
《彭博商业周刊中文版》整理的少林寺企业版图
对于普通人来说,少林寺赚了那么多钱,理应就不要在游客身上打主意了吧?
但实际上,大钱要赚,小钱也不放过。
门票钱就不说了。
早在2007年,新民晚报就报道:在少林寺大雄宝殿台阶下有个卖香处,有僧人专门负责。
这里卖香“明码标价”,最低400元一炷,然后是1300元、2600元、3900元不等,最高价位是10万元一炷。
还有网友说,在少林寺,常听到的一句话是,别人一般捐最少一千,施主您请随意。
十多年前媒体的有关报道
少林寺在商业化的道路上,越走越远。
对主持释永信的质疑,也一直不断。
2015年5月,一篇署名“释正义”的网友公开举报释永信。
帖子内容很“劲爆”,不仅说释永信有严重的经济问题,还说他早被“开除僧籍”,且有情人有女儿,如今已当上外公。
随着舆论发酵,少林寺选择了报警。
官方最后给出的调查结论是,举报内容都是谣言。
释永信
2017年,网络上再次有人举报“释永信的七大经济问题”,指控他曾向前少林寺武僧总教头释延鲁索要巨额财物,非法持有河南少林无形资产股份,侵占高香收入,购买多辆百万豪车、靓号等等。
最后的官方结论是,查无实据,全属造谣中伤,仅在内部财务管理上,还有一些需要整改的问题。
释永信面对各种质疑,也很委屈,表示虽然少林寺确实赚了不少钱,可自己的工资只是“每月700元”。
他解释说,每年大几亿的收入,大多用在了寺庙的维护和修缮上,其他还有僧人的工资、行政开支,以及各种大型的佛教典礼,哪怕有结余,也会将钱捐赠给相关慈善部门。
至于钱财的使用和支出,那更是有专门财务管理制度以及专人监督,毫无贪墨的可能。
但也有人说,这位少林寺“大和尚”,出入豪车接送,身披的“云锦袈裟”价值16万。
不过,少林寺长袖善舞的功力,在去年,更是让人们大开眼界。
2020年9月,少林寺发布声明,否认和国货品牌“森马”有任何跨界合作,更以侵权为由,要求其下架所有标注“少林”二字的商品。
而人们也才发现,释永信所说的少林寺“无形资产”,绝非空穴来风,而且在各个领域注册和“少林寺”有关的商标,就有600多个。
属于无形资产一部分的少林寺注册商标
这笔“无形资产”实际估值几何,想要说得清楚,那也许只有靠上市了。
少林寺如果要上市,看似不可思议,却也不是佛门第一个吃螃蟹的。
佛门四大名山中,峨眉山早在1997年就登陆了A股市场;九华山三次冲击IPO,终于在2015年上市;普陀山也在冲刺上市。
所以,假如说少林寺真的要上市,也不是什么不可思议的事情了。
少林寺一路走来,从寂寂无名到成为世界闻名的佛门古刹,除了因为碰上了难得的机遇,也有现年58岁释永信的功劳。
只不过,曾经是落寞、清净的佛门。
今天是喧嚣、世俗之所。
对少林寺来说,到底是幸运,还是不幸呢?
转自:https://mp.weixin.qq.com/s/6TghaHcMSY0crFHJrB9a6g
本文转自公众号:小花生网
“你们问我,这套房子现在是不是直逼千万了呀?其实远远没有那么多,价格砍半吧,估计都比不上上海一套普通的两室一厅… 特别庆幸当初自己能遇上老公,是他让我坚定不移地回到重庆,住得更舒适,找到了自己热爱的园艺,在慢生活的城市里学习和思考、感受人生的美好、体会生活的意义…”
这是现在的我和我家花园,穿长裙的是我,还有女儿和朋友
上图来源于网络@重庆游探长
转自:https://mp.weixin.qq.com/s/6OvZo6BJhtInvcI1TpTOJQ
公司上市,用通俗的话说,就是把公司的所有权分成若干小份,放在市场上流通,机构或个人投资者如果看好公司的行业或者前景,就可以到公开市场上买入该公司的股票。不上市就是不把股权放在公开市场上流通,如果有需求,就以非公开的方式进行转让。 点击查看 公司ipo上市大数据汇总
转自:https://mp.weixin.qq.com/s/S5qlIJYMpyXVZtyK-UeQBw